/*
Highcharts JS v2.1.9 (2011-11-11)

(c) 2009-2011 Torstein H

License: www.highcharts.com/license
*/



(function () {
    function sa(a, b) { var c; a || (a = {}); for (c in b) a[c] = b[c]; return a } function ja(a, b) { return parseInt(a, b || 10) } function Sb(a) { return typeof a === "string" } function Nb(a) { return typeof a === "object" } function lc(a) { return typeof a === "number" } function mc(a) { return Fa.log(a) / Fa.LN10 } function nc(a, b) { for (var c = a.length; c--; ) if (a[c] === b) { a.splice(c, 1); break } } function K(a) { return a !== Wa && a !== null } function Ga(a, b, c) {
        var d, e; if (Sb(b)) if (K(c)) a.setAttribute(b, c); else { if (a && a.getAttribute) e = a.getAttribute(b) } else if (K(b) &&
Nb(b)) for (d in b) a.setAttribute(d, b[d]); return e
    } function zc(a) { return Object.prototype.toString.call(a) === "[object Array]" ? a : [a] } function A() { var a = arguments, b, c, d = a.length; for (b = 0; b < d; b++) { c = a[b]; if (typeof c !== "undefined" && c !== null) return c } } function Ja(a, b) { if (Pc) if (b && b.opacity !== Wa) b.filter = "alpha(opacity=" + b.opacity * 100 + ")"; sa(a.style, b) } function hb(a, b, c, d, e) { a = ua.createElement(a); b && sa(a, b); e && Ja(a, { padding: 0, border: jb, margin: 0 }); c && Ja(a, c); d && d.appendChild(a); return a } function yb(a, b) {
        var c =
function () { }; c.prototype = new a; sa(c.prototype, b); return c
    } function Ed(a, b, c, d) { var e = Xa.lang; a = a; var f = isNaN(b = bb(b)) ? 2 : b; b = c === undefined ? e.decimalPoint : c; d = d === undefined ? e.thousandsSep : d; e = a < 0 ? "-" : ""; c = String(ja(a = bb(+a || 0).toFixed(f))); var g = c.length > 3 ? c.length % 3 : 0; return e + (g ? c.substr(0, g) + d : "") + c.substr(g).replace(/(\d{3})(?=\d)/g, "$1" + d) + (f ? b + bb(a - c).toFixed(f).slice(2) : "") } function Fd(a) {
        var b = { left: a.offsetLeft, top: a.offsetTop }; for (a = a.offsetParent; a; ) {
            b.left += a.offsetLeft; b.top += a.offsetTop;
            if (a !== ua.body && a !== ua.documentElement) { b.left -= a.scrollLeft; b.top -= a.scrollTop } a = a.offsetParent
        } return b
    } function Gd() { this.symbol = this.color = 0 } function fe(a, b, c, d, e, f, g) { var h = g.x; g = g.y; var i = h - a + c - 25, j = g - b + d + 10, m; if (i < 7) i = c + h + 15; if (i + a > c + e) { i -= i + a - (c + e); j -= b; m = true } if (j < 5) { j = 5; if (m && g >= j && g <= j + b) j = g + b - 5 } else if (j + b > d + f) j = d + f - b - 5; return { x: i, y: j} } function Hd(a, b) { var c = a.length, d; for (d = 0; d < c; d++) a[d].ss_i = d; a.sort(function (e, f) { var g = b(e, f); return g === 0 ? e.ss_i - f.ss_i : g }); for (d = 0; d < c; d++) delete a[d].ss_i }
    function Ac(a) { for (var b in a) { a[b] && a[b].destroy && a[b].destroy(); delete a[b] } } function oc(a, b) { Bc = A(a, b.animation) } function Id() {
        var a = Xa.global.useUTC; Qc = a ? Date.UTC : function (b, c, d, e, f, g) { return (new Date(b, c, A(d, 1), A(e, 0), A(f, 0), A(g, 0))).getTime() }; id = a ? "getUTCMinutes" : "getMinutes"; jd = a ? "getUTCHours" : "getHours"; kd = a ? "getUTCDay" : "getDay"; Cc = a ? "getUTCDate" : "getDate"; Rc = a ? "getUTCMonth" : "getMonth"; Sc = a ? "getUTCFullYear" : "getFullYear"; Jd = a ? "setUTCMinutes" : "setMinutes"; Kd = a ? "setUTCHours" : "setHours"; ld =
a ? "setUTCDate" : "setDate"; Ld = a ? "setUTCMonth" : "setMonth"; Md = a ? "setUTCFullYear" : "setFullYear"
    } function pc(a) { Tc || (Tc = hb(Tb)); a && Tc.appendChild(a); Tc.innerHTML = "" } function Uc() { } function Nd(a, b) {
        function c(p) {
            function q(k, n) { this.pos = k; this.minor = n; this.isNew = true; n || this.addLabel() } function w(k) { if (k) { this.options = k; this.id = k.id } return this } function x(k, n, t, r) {
                this.isNegative = n; this.options = k; this.x = t; this.stack = r; this.alignOptions = { align: k.align || (va ? n ? "left" : "right" : "center"), verticalAlign: k.verticalAlign ||
(va ? "middle" : n ? "bottom" : "top"), y: A(k.y, va ? 4 : n ? 14 : -6), x: A(k.x, va ? n ? -6 : 6 : 0)
                }; this.textAlign = k.textAlign || (va ? n ? "right" : "left" : "center")
            } function V() {
                var k = [], n = [], t; pa = wa = null; zb = []; u(Ha, function (r) {
                    t = false; u(["xAxis", "yAxis"], function (F) { if (r.isCartesian && (F === "xAxis" && xa || F === "yAxis" && !xa) && (r.options[F] === o.index || r.options[F] === Wa && o.index === 0)) { r[F] = I; zb.push(r); t = true } }); if (!r.visible && z.ignoreHiddenSeries) t = false; if (t) {
                        var J, E, Q, fa, ka, $; if (!xa) {
                            J = r.options.stacking; Vc = J === "percent"; if (J) {
                                ka =
r.options.stack; fa = r.type + A(ka, ""); $ = "-" + fa; r.stackKey = fa; E = k[fa] || []; k[fa] = E; Q = n[$] || []; n[$] = Q
                            } if (Vc) { pa = 0; wa = 99 } 
                        } if (r.isCartesian) {
                            u(r.data, function (F) { var O = F.x, S = F.y, aa = S < 0, Eb = aa ? Q : E, kb = aa ? $ : fa; if (pa === null) pa = wa = F[qa]; if (xa) if (O > wa) wa = O; else { if (O < pa) pa = O } else if (K(S)) { if (J) Eb[O] = K(Eb[O]) ? Eb[O] + S : S; S = Eb ? Eb[O] : S; F = A(F.low, S); if (!Vc) if (S > wa) wa = S; else if (F < pa) pa = F; if (J) { s[kb] || (s[kb] = {}); s[kb][O] || (s[kb][O] = new x(o.stackLabels, aa, O, ka)); s[kb][O].setTotal(S) } } }); if (/(area|column|bar)/.test(r.type) &&
!xa) if (pa >= 0) { pa = 0; Od = true } else if (wa < 0) { wa = 0; Pd = true } 
                        } 
                    } 
                })
            } function N(k, n) { var t, r; Fb = n ? 1 : Fa.pow(10, lb(Fa.log(k) / Fa.LN10)); t = k / Fb; if (!n) { n = [1, 2, 2.5, 5, 10]; if (o.allowDecimals === false || ca) if (Fb === 1) n = [1, 2, 5, 10]; else if (Fb <= 0.1) n = [1 / Fb] } for (r = 0; r < n.length; r++) { k = n[r]; if (t <= (n[r] + (n[r + 1] || n[r])) / 2) break } k *= Fb; return k } function ta(k) { var n; n = k; Fb = A(Fb, Fa.pow(10, lb(Fa.log(Ta) / Fa.LN10))); if (Fb < 1) { n = W(1 / Fb) * 10; n = W(k * n) / n } return n } function da() {
                var k, n, t, r, J = o.tickInterval, E = o.tickPixelInterval; k = o.maxZoom ||
(xa && !K(o.min) && !K(o.max) ? tb(l.smallestInterval * 5, wa - pa) : null); ya = R ? Da : Aa; if (Ub) { t = l[xa ? "xAxis" : "yAxis"][o.linkedTo]; r = t.getExtremes(); ia = A(r.min, r.dataMin); ra = A(r.max, r.dataMax) } else { ia = A(Vb, o.min, pa); ra = A(Gb, o.max, wa) } if (ca) { ia = mc(ia); ra = mc(ra) } if (ra - ia < k) { r = (k - ra + ia) / 2; ia = Ia(ia - r, A(o.min, ia - r), pa); ra = tb(ia + k, A(o.max, ia + k), wa) } if (!Ya && !Vc && !Ub && K(ia) && K(ra)) { k = ra - ia || 1; if (!K(o.min) && !K(Vb) && Qd && (pa < 0 || !Od)) ia -= k * Qd; if (!K(o.max) && !K(Gb) && Rd && (wa > 0 || !Pd)) ra += k * Rd } Ta = ia === ra ? 1 : Ub && !J && E === t.options.tickPixelInterval ?
t.tickInterval : A(J, Ya ? 1 : (ra - ia) * E / ya); if (!D && !K(o.tickInterval)) Ta = N(Ta); I.tickInterval = Ta; Wc = o.minorTickInterval === "auto" && Ta ? Ta / 5 : o.minorTickInterval; if (D) {
                    Ba = []; J = Xa.global.useUTC; var Q = 1E3 / ub, fa = 6E4 / ub, ka = 36E5 / ub; E = 864E5 / ub; k = 6048E5 / ub; r = 2592E6 / ub; var $ = 31556952E3 / ub, F = [["second", Q, [1, 2, 5, 10, 15, 30]], ["minute", fa, [1, 2, 5, 10, 15, 30]], ["hour", ka, [1, 2, 3, 4, 6, 8, 12]], ["day", E, [1, 2]], ["week", k, [1, 2]], ["month", r, [1, 2, 3, 4, 6]], ["year", $, null]], O = F[6], S = O[1], aa = O[2]; for (t = 0; t < F.length; t++) {
                        O = F[t]; S = O[1]; aa =
O[2]; if (F[t + 1]) if (Ta <= (S * aa[aa.length - 1] + F[t + 1][1]) / 2) break
                    } if (S === $ && Ta < 5 * S) aa = [1, 2, 5]; F = N(Ta / S, aa); aa = new Date(ia * ub); aa.setMilliseconds(0); if (S >= Q) aa.setSeconds(S >= fa ? 0 : F * lb(aa.getSeconds() / F)); if (S >= fa) aa[Jd](S >= ka ? 0 : F * lb(aa[id]() / F)); if (S >= ka) aa[Kd](S >= E ? 0 : F * lb(aa[jd]() / F)); if (S >= E) aa[ld](S >= r ? 1 : F * lb(aa[Cc]() / F)); if (S >= r) { aa[Ld](S >= $ ? 0 : F * lb(aa[Rc]() / F)); n = aa[Sc]() } if (S >= $) { n -= n % F; aa[Md](n) } S === k && aa[ld](aa[Cc]() - aa[kd]() + o.startOfWeek); t = 1; n = aa[Sc](); Q = aa.getTime() / ub; fa = aa[Rc](); for (ka = aa[Cc](); Q <
ra && t < Da; ) { Ba.push(Q); if (S === $) Q = Qc(n + t * F, 0) / ub; else if (S === r) Q = Qc(n, fa + t * F) / ub; else if (!J && (S === E || S === k)) Q = Qc(n, fa, ka + t * F * (S === E ? 1 : 7)); else Q += S * F; t++ } Ba.push(Q); Xc = o.dateTimeLabelFormats[O[0]]
                } else { t = ta(lb(ia / Ta) * Ta); n = ta(md(ra / Ta) * Ta); Ba = []; for (t = ta(t); t <= n; ) { Ba.push(t); t = ta(t + Ta) } } if (!Ub) {
                    if (Ya || xa && l.hasColumn) { n = (Ya ? 1 : Ta) * 0.5; if (Ya || !K(A(o.min, Vb))) ia -= n; if (Ya || !K(A(o.max, Gb))) ra += n } n = Ba[0]; t = Ba[Ba.length - 1]; if (o.startOnTick) ia = n; else ia > n && Ba.shift(); if (o.endOnTick) ra = t; else ra < t && Ba.pop();
                    Ob || (Ob = { x: 0, y: 0 }); if (!D && Ba.length > Ob[qa]) Ob[qa] = Ba.length
                } 
            } function Ma() { var k, n; Dc = ia; Sd = ra; V(); da(); Hb = fb; fb = ya / (ra - ia || 1); if (!xa) for (k in s) for (n in s[k]) s[k][n].cum = s[k][n].total; if (!I.isDirty) I.isDirty = ia !== Dc || ra !== Sd } function za(k) { k = (new w(k)).render(); Pb.push(k); return k } function eb() {
                var k = o.title, n = o.stackLabels, t = o.alternateGridColor, r = o.lineWidth, J, E, Q = (J = l.hasRendered) && K(Dc) && !isNaN(Dc); E = zb.length && K(ia) && K(ra); ya = R ? Da : Aa; fb = ya / (ra - ia || 1); cc = R ? X : vb; if (E || Ub) {
                    if (Wc && !Ya) for (E = ia +
(Ba[0] - ia) % Wc; E <= ra; E += Wc) { Wb[E] || (Wb[E] = new q(E, true)); Q && Wb[E].isNew && Wb[E].render(null, true); Wb[E].isActive = true; Wb[E].render() } u(Ba, function ($, F) { if (!Ub || $ >= ia && $ <= ra) { Q && mb[$].isNew && mb[$].render(F, true); mb[$].isActive = true; mb[$].render(F) } }); t && u(Ba, function ($, F) { if (F % 2 === 0 && $ < ra) { dc[$] || (dc[$] = new w); dc[$].options = { from: $, to: Ba[F + 1] !== Wa ? Ba[F + 1] : ra, color: t }; dc[$].render(); dc[$].isActive = true } }); J || u((o.plotLines || []).concat(o.plotBands || []), function ($) { Pb.push((new w($)).render()) })
                } u([mb,
Wb, dc], function ($) { for (var F in $) if ($[F].isActive) $[F].isActive = false; else { $[F].destroy(); delete $[F] } }); if (r) { J = X + (Oa ? Da : 0) + la; E = cb - vb - (Oa ? Aa : 0) + la; J = ga.crispLine([Za, R ? X : J, R ? E : ea, Ka, R ? $a - Ib : J, R ? E : cb - vb], r); if (La) La.animate({ d: J }); else La = ga.path(J).attr({ stroke: o.lineColor, "stroke-width": r, zIndex: 7 }).add() } if (ba) {
                    J = R ? X : ea; r = ja(k.style.fontSize || 12); J = { low: J + (R ? 0 : ya), middle: J + ya / 2, high: J + (R ? ya : 0)}[k.align]; r = (R ? ea + Aa : X) + (R ? 1 : -1) * (Oa ? -1 : 1) * nd + (L === 2 ? r : 0); ba[ba.isNew ? "attr" : "animate"]({ x: R ? J : r + (Oa ?
Da : 0) + la + (k.x || 0), y: R ? r - (Oa ? Aa : 0) + la : J + (k.y || 0)
                    }); ba.isNew = false
                } if (n && n.enabled) { var fa, ka; n = I.stackTotalGroup; if (!n) I.stackTotalGroup = n = ga.g("stack-labels").attr({ visibility: Ab, zIndex: 6 }).translate(X, ea).add(); for (fa in s) { k = s[fa]; for (ka in k) k[ka].render(n) } } I.isDirty = false
            } function ab(k) { for (var n = Pb.length; n--; ) Pb[n].id === k && Pb[n].destroy() } var xa = p.isX, Oa = p.opposite, R = va ? !xa : xa, L = R ? Oa ? 0 : 2 : Oa ? 1 : 3, s = {}, o = Ca(xa ? Yc : od, [ge, he, Td, ie][L], p), I = this, ba, B = o.type, D = B === "datetime", ca = B === "logarithmic",
la = o.offset || 0, qa = xa ? "x" : "y", ya, fb, Hb, cc = R ? X : vb, G, ha, na, Ra, La, pa, wa, zb, Vb, Gb, ra = null, ia = null, Dc, Sd, Qd = o.minPadding, Rd = o.maxPadding, Ub = K(o.linkedTo), Od, Pd, Vc; B = o.events; var pd, Pb = [], Ta, Wc, Fb, Ba, mb = {}, Wb = {}, dc = {}, qc, rc, nd, Xc, Ya = o.categories, je = o.labels.formatter || function () { var k = this.value; return Xc ? Zc(Xc, k) : Ta % 1E6 === 0 ? k / 1E6 + "M" : Ta % 1E3 === 0 ? k / 1E3 + "k" : !Ya && k >= 1E3 ? Ed(k, 0) : k }, $c = R && o.labels.staggerLines, ec = o.reversed, fc = Ya && o.tickmarkPlacement === "between" ? 0.5 : 0; q.prototype = { addLabel: function () {
    var k = this.pos,
n = o.labels, t = !(k === ia && !A(o.showFirstLabel, 1) || k === ra && !A(o.showLastLabel, 0)), r = Ya && R && Ya.length && !n.step && !n.staggerLines && !n.rotation && Da / Ya.length || !R && Da / 2, J = Ya && K(Ya[k]) ? Ya[k] : k, E = this.label; k = je.call({ isFirst: k === Ba[0], isLast: k === Ba[Ba.length - 1], dateTimeLabelFormat: Xc, value: ca ? Fa.pow(10, J) : J }); r = r && { width: Ia(1, W(r - 2 * (n.padding || 10))) + Ua }; r = sa(r, n.style); if (E === Wa) this.label = K(k) && t && n.enabled ? ga.text(k, 0, 0, n.useHTML).attr({ align: n.align, rotation: n.rotation }).css(r).add(na) : null; else E && E.attr({ text: k }).css(r)
},
    getLabelSize: function () { var k = this.label; return k ? (this.labelBBox = k.getBBox())[R ? "height" : "width"] : 0 }, render: function (k, n) {
        var t = !this.minor, r = this.label, J = this.pos, E = o.labels, Q = this.gridLine, fa = t ? o.gridLineWidth : o.minorGridLineWidth, ka = t ? o.gridLineColor : o.minorGridLineColor, $ = t ? o.gridLineDashStyle : o.minorGridLineDashStyle, F = this.mark, O = t ? o.tickLength : o.minorTickLength, S = t ? o.tickWidth : o.minorTickWidth || 0, aa = t ? o.tickColor : o.minorTickColor, Eb = t ? o.tickPosition : o.minorTickPosition, kb = E.step, nb = n && ad ||
cb, Qb; Qb = R ? G(J + fc, null, null, n) + cc : X + la + (Oa ? (n && qd || $a) - Ib - X : 0); nb = R ? nb - vb + la - (Oa ? Aa : 0) : nb - G(J + fc, null, null, n) - cc; if (fa) { J = ha(J + fc, fa, n); if (Q === Wa) { Q = { stroke: ka, "stroke-width": fa }; if ($) Q.dashstyle = $; if (t) Q.zIndex = 1; this.gridLine = Q = fa ? ga.path(J).attr(Q).add(Ra) : null } !n && Q && J && Q.animate({ d: J }) } if (S) { if (Eb === "inside") O = -O; if (Oa) O = -O; t = ga.crispLine([Za, Qb, nb, Ka, Qb + (R ? 0 : -O), nb + (R ? O : 0)], S); if (F) F.animate({ d: t }); else this.mark = ga.path(t).attr({ stroke: aa, "stroke-width": S }).add(na) } if (r && !isNaN(Qb)) {
            Qb = Qb +
E.x - (fc && R ? fc * fb * (ec ? -1 : 1) : 0); nb = nb + E.y - (fc && !R ? fc * fb * (ec ? 1 : -1) : 0); K(E.y) || (nb += ja(r.styles.lineHeight) * 0.9 - r.getBBox().height / 2); if ($c) nb += k / (kb || 1) % $c * 16; if (kb) r[k % kb ? "hide" : "show"](); r[this.isNew ? "attr" : "animate"]({ x: Qb, y: nb })
        } this.isNew = false
    }, destroy: function () { Ac(this) } 
}; w.prototype = { render: function () {
    var k = this, n = k.options, t = n.label, r = k.label, J = n.width, E = n.to, Q = n.from, fa = n.value, ka, $ = n.dashStyle, F = k.svgElem, O = [], S, aa, Eb = n.color; aa = n.zIndex; var kb = n.events; if (ca) { Q = mc(Q); E = mc(E); fa = mc(fa) } if (J) {
        O =
ha(fa, J); n = { stroke: Eb, "stroke-width": J }; if ($) n.dashstyle = $
    } else if (K(Q) && K(E)) { Q = Ia(Q, ia); E = tb(E, ra); ka = ha(E); if ((O = ha(Q)) && ka) O.push(ka[4], ka[5], ka[1], ka[2]); else O = null; n = { fill: Eb} } else return; if (K(aa)) n.zIndex = aa; if (F) if (O) F.animate({ d: O }, null, F.onGetPath); else { F.hide(); F.onGetPath = function () { F.show() } } else if (O && O.length) { k.svgElem = F = ga.path(O).attr(n).add(); if (kb) { $ = function (nb) { F.on(nb, function (Qb) { kb[nb].apply(k, [Qb]) }) }; for (S in kb) $(S) } } if (t && K(t.text) && O && O.length && Da > 0 && Aa > 0) {
        t = Ca({ align: R &&
ka && "center", x: R ? !ka && 4 : 10, verticalAlign: !R && ka && "middle", y: R ? ka ? 16 : 10 : ka ? 6 : -4, rotation: R && !ka && 90
        }, t); if (!r) k.label = r = ga.text(t.text, 0, 0).attr({ align: t.textAlign || t.align, rotation: t.rotation, zIndex: aa }).css(t.style).add(); ka = [O[1], O[4], A(O[6], O[1])]; O = [O[2], O[5], A(O[7], O[2])]; S = tb.apply(Fa, ka); aa = tb.apply(Fa, O); r.align(t, false, { x: S, y: aa, width: Ia.apply(Fa, ka) - S, height: Ia.apply(Fa, O) - aa }); r.show()
    } else r && r.hide(); return k
}, destroy: function () { Ac(this); nc(Pb, this) } 
}; x.prototype = { destroy: function () { Ac(this) },
    setTotal: function (k) { this.cum = this.total = k }, render: function (k) { var n = this.options.formatter.call(this); if (this.label) this.label.attr({ text: n, visibility: ob }); else this.label = l.renderer.text(n, 0, 0).css(this.options.style).attr({ align: this.textAlign, rotation: this.options.rotation, visibility: ob }).add(k) }, setOffset: function (k, n) {
        var t = this.isNegative, r = I.translate(this.total), J = I.translate(0); J = bb(r - J); var E = l.xAxis[0].translate(this.x) + k, Q = l.plotHeight; t = { x: va ? t ? r : r - J : E, y: va ? Q - E - n : t ? Q - r - J : Q - r, width: va ?
J : n, height: va ? n : J
        }; this.label && this.label.align(this.alignOptions, null, t).attr({ visibility: Ab })
    } 
}; G = function (k, n, t, r, J) { var E = 1, Q = 0, fa = r ? Hb : fb; r = r ? Dc : ia; fa || (fa = fb); if (t) { E *= -1; Q = ya } if (ec) { E *= -1; Q -= E * ya } if (n) { if (ec) k = ya - k; k = k / fa + r; if (ca && J) k = Fa.pow(10, k) } else { if (ca && J) k = mc(k); k = E * (k - r) * fa + Q } return k }; ha = function (k, n, t) {
    var r, J, E; k = G(k, null, null, t); var Q = t && ad || cb, fa = t && qd || $a, ka; t = J = W(k + cc); r = E = W(Q - k - cc); if (isNaN(k)) ka = true; else if (R) { r = ea; E = Q - vb; if (t < X || t > X + Da) ka = true } else {
        t = X; J = fa - Ib; if (r < ea || r >
ea + Aa) ka = true
    } return ka ? null : ga.crispLine([Za, t, r, Ka, J, E], n || 0)
}; if (va && xa && ec === Wa) ec = true; sa(I, { addPlotBand: za, addPlotLine: za, adjustTickAmount: function () { if (Ob && !D && !Ya && !Ub) { var k = qc, n = Ba.length; qc = Ob[qa]; if (n < qc) { for (; Ba.length < qc; ) Ba.push(ta(Ba[Ba.length - 1] + Ta)); fb *= (n - 1) / (qc - 1); ra = Ba[Ba.length - 1] } if (K(k) && qc !== k) I.isDirty = true } }, categories: Ya, getExtremes: function () { return { min: ia, max: ra, dataMin: pa, dataMax: wa, userMin: Vb, userMax: Gb} }, getPlotLinePath: ha, getThreshold: function (k) {
    if (ia > k) k = ia; else if (ra <
k) k = ra; return G(k, 0, 1)
}, isXAxis: xa, options: o, plotLinesAndBands: Pb, getOffset: function () {
    var k = zb.length && K(ia) && K(ra), n = 0, t = 0, r = o.title, J = o.labels, E = [-1, 1, 1, -1][L], Q; if (!na) { na = ga.g("axis").attr({ zIndex: 7 }).add(); Ra = ga.g("grid").attr({ zIndex: 1 }).add() } rc = 0; if (k || Ub) { u(Ba, function (fa) { if (mb[fa]) mb[fa].addLabel(); else mb[fa] = new q(fa); if (L === 0 || L === 2 || { 1: "left", 3: "right"}[L] === J.align) rc = Ia(mb[fa].getLabelSize(), rc) }); if ($c) rc += ($c - 1) * 16 } else for (Q in mb) { mb[Q].destroy(); delete mb[Q] } if (r && r.text) {
        if (!ba) {
            ba =
I.axisTitle = ga.text(r.text, 0, 0, r.useHTML).attr({ zIndex: 7, rotation: r.rotation || 0, align: r.textAlign || { low: "left", middle: "center", high: "right"}[r.align] }).css(r.style).add(); ba.isNew = true
        } n = ba.getBBox()[R ? "height" : "width"]; t = A(r.margin, R ? 5 : 10)
    } la = E * (o.offset || Xb[L]); nd = rc + (L !== 2 && rc && E * o.labels[R ? "y" : "x"]) + t; Xb[L] = Ia(Xb[L], nd + n + E * la)
}, render: eb, setCategories: function (k, n) { I.categories = p.categories = Ya = k; u(zb, function (t) { t.translate(); t.setTooltipPoints(true) }); I.isDirty = true; A(n, true) && l.redraw() }, setExtremes: function (k,
n, t, r) { t = A(t, true); Pa(I, "setExtremes", { min: k, max: n }, function () { Vb = k; Gb = n; t && l.redraw(r) }) }, setScale: Ma, setTickPositions: da, translate: G, redraw: function () { Yb.resetTracker && Yb.resetTracker(); eb(); u(Pb, function (k) { k.render() }); u(zb, function (k) { k.isDirty = true }) }, removePlotBand: ab, removePlotLine: ab, reversed: ec, stacks: s, destroy: function () {
    var k; pb(I); for (k in s) { Ac(s[k]); s[k] = null } if (I.stackTotalGroup) I.stackTotalGroup = I.stackTotalGroup.destroy(); u([mb, Wb, dc, Pb], function (n) { Ac(n) }); u([La, na, Ra, ba], function (n) {
        n &&
n.destroy()
    }); La = na = Ra = ba = null
} 
}); for (pd in B) Qa(I, pd, B[pd]); Ma()
        } function d() { var p = {}; return { add: function (q, w, x, V) { if (!p[q]) { w = ga.text(w, 0, 0).css(a.toolbar.itemStyle).align({ align: "right", x: -Ib - 20, y: ea + 30 }).on("click", V).attr({ align: "right", zIndex: 20 }).add(); p[q] = w } }, remove: function (q) { pc(p[q].element); p[q] = null } } } function e(p) {
            function q() {
                var B = this.points || zc(this), D = B[0].series.xAxis, ca = this.x; D = D && D.options.type === "datetime"; var la = Sb(ca) || D, qa; qa = la ? ['<span style="font-size: 10px">' + (D ? Zc("%A, %b %e, %Y",
ca) : ca) + "</span>"] : []; u(B, function (ya) { qa.push(ya.point.tooltipFormatter(la)) }); return qa.join("<br/>")
            } function w(B, D) { L = xa ? B : (2 * L + B) / 3; s = xa ? D : (s + D) / 2; o.translate(L, s); rd = bb(B - L) > 1 || bb(D - s) > 1 ? function () { w(B, D) } : null } function x() { if (!xa) { var B = l.hoverPoints; o.hide(); u(da, function (D) { D && D.hide() }); B && u(B, function (D) { D.setState() }); l.hoverPoints = null; xa = true } } var V, N = p.borderWidth, ta = p.crosshairs, da = [], Ma = p.style, za = p.shared, eb = ja(Ma.padding), ab = N + eb, xa = true, Oa, R, L = 0, s = 0; Ma.padding = 0; var o = ga.g("tooltip").attr({ zIndex: 8 }).add(),
I = ga.rect(ab, ab, 0, 0, p.borderRadius, N).attr({ fill: p.backgroundColor, "stroke-width": N }).add(o).shadow(p.shadow), ba = ga.text("", eb + ab, ja(Ma.fontSize) + eb + ab, p.useHTML).attr({ zIndex: 1 }).css(Ma).add(o); o.hide(); return { shared: za, refresh: function (B) {
    var D, ca, la, qa = 0, ya = {}, fb = []; la = B.tooltipPos; D = p.formatter || q; ya = l.hoverPoints; if (za) {
        ya && u(ya, function (Hb) { Hb.setState() }); l.hoverPoints = B; u(B, function (Hb) { Hb.setState(Bb); qa += Hb.plotY; fb.push(Hb.getLabelConfig()) }); ca = B[0].plotX; qa = W(qa) / B.length; ya = { x: B[0].category };
        ya.points = fb; B = B[0]
    } else ya = B.getLabelConfig(); ya = D.call(ya); V = B.series; ca = za ? ca : B.plotX; qa = za ? qa : B.plotY; D = W(la ? la[0] : va ? Da - qa : ca); ca = W(la ? la[1] : va ? Aa - ca : qa); la = za || !B.series.isCartesian || gc(D, ca); if (ya === false || !la) x(); else { if (xa) { o.show(); xa = false } ba.attr({ text: ya }); la = ba.getBBox(); Oa = la.width + 2 * eb; R = la.height + 2 * eb; I.attr({ width: Oa, height: R, stroke: p.borderColor || B.color || V.color || "#606060" }); D = fe(Oa, R, X, ea, Da, Aa, { x: D, y: ca }); w(W(D.x - ab), W(D.y - ab)) } if (ta) {
        ta = zc(ta); for (D = ta.length; D--; ) {
            ca = B.series[D ?
"yAxis" : "xAxis"]; if (ta[D] && ca) { ca = ca.getPlotLinePath(B[D ? "y" : "x"], 1); if (da[D]) da[D].attr({ d: ca, visibility: Ab }); else { la = { "stroke-width": ta[D].width || 1, stroke: ta[D].color || "#C0C0C0", zIndex: 2 }; if (ta[D].dashStyle) la.dashstyle = ta[D].dashStyle; da[D] = ga.path(ca).attr(la).add() } } 
        } 
    } 
}, hide: x, destroy: function () { u(da, function (B) { B && B.destroy() }); u([I, ba, o], function (B) { B && B.destroy() }); I = ba = o = null } 
}
        } function f(p) {
            function q(L) {
                var s, o = Ud && ua.width / ua.body.scrollWidth - 1, I, ba, B; L = L || db.event; if (!L.target) L.target =
L.srcElement; s = L.touches ? L.touches.item(0) : L; if (L.type !== "mousemove" || db.opera || o) { Jb = Fd(oa); I = Jb.left; ba = Jb.top } if (Pc) { B = L.x; s = L.y } else if (s.layerX === Wa) { B = s.pageX - I; s = s.pageY - ba } else { B = L.layerX; s = L.layerY } if (o) { B += W((o + 1) * I - I); s += W((o + 1) * ba - ba) } return sa(L, { chartX: B, chartY: s })
            } function w(L) { var s = { xAxis: [], yAxis: [] }; u(Va, function (o) { var I = o.translate, ba = o.isXAxis; s[ba ? "xAxis" : "yAxis"].push({ axis: o, value: I((va ? !ba : ba) ? L.chartX - X : Aa - L.chartY + ea, true) }) }); return s } function x() {
                var L = l.hoverSeries,
s = l.hoverPoint; s && s.onMouseOut(); L && L.onMouseOut(); hc && hc.hide(); sd = null
            } function V() { if (za) { var L = { xAxis: [], yAxis: [] }, s = za.getBBox(), o = s.x - X, I = s.y - ea; if (Ma) { u(Va, function (ba) { var B = ba.translate, D = ba.isXAxis, ca = va ? !D : D, la = B(ca ? o : Aa - I - s.height, true, 0, 0, 1); B = B(ca ? o + s.width : Aa - I, true, 0, 0, 1); L[D ? "xAxis" : "yAxis"].push({ axis: ba, min: tb(la, B), max: Ia(la, B) }) }); Pa(l, "selection", L, td) } za = za.destroy() } l.mouseIsDown = ud = Ma = false; pb(ua, Kb ? "touchend" : "mouseup", V) } function N(L) {
                var s = K(L.pageX) ? L.pageX : L.page.x; L =
K(L.pageX) ? L.pageY : L.page.y; Jb && !gc(s - Jb.left - X, L - Jb.top - ea) && x()
            } var ta, da, Ma, za, eb = z.zoomType, ab = /x/.test(eb), xa = /y/.test(eb), Oa = ab && !va || xa && va, R = xa && !va || ab && va; bd = function () { if (Ec) { Ec.translate(X, ea); va && Ec.attr({ width: l.plotWidth, height: l.plotHeight }).invert() } else l.trackerGroup = Ec = ga.g("tracker").attr({ zIndex: 9 }).add() }; bd(); if (p.enabled) l.tooltip = hc = e(p); (function () {
                oa.onmousedown = function (s) {
                    s = q(s); !Kb && s.preventDefault && s.preventDefault(); l.mouseIsDown = ud = true; ta = s.chartX; da = s.chartY; Qa(ua,
Kb ? "touchend" : "mouseup", V)
                }; var L = function (s) {
                    if (!(s && s.touches && s.touches.length > 1)) {
                        s = q(s); if (!Kb) s.returnValue = false; var o = s.chartX, I = s.chartY, ba = !gc(o - X, I - ea); Jb || (Jb = Fd(oa)); if (Kb && s.type === "touchstart") if (Ga(s.target, "isTracker")) l.runTrackerClick || s.preventDefault(); else !ke && !ba && s.preventDefault(); if (ba) { if (o < X) o = X; else if (o > X + Da) o = X + Da; if (I < ea) I = ea; else if (I > ea + Aa) I = ea + Aa } if (ud && s.type !== "touchstart") {
                            Ma = Math.sqrt(Math.pow(ta - o, 2) + Math.pow(da - I, 2)); if (Ma > 10) {
                                if (sc && (ab || xa) && gc(ta - X, da - ea)) za ||
(za = ga.rect(X, ea, Oa ? 1 : Da, R ? 1 : Aa, 0).attr({ fill: z.selectionMarkerFill || "rgba(69,114,167,0.25)", zIndex: 7 }).add()); if (za && Oa) { o = o - ta; za.attr({ width: bb(o), x: (o > 0 ? 0 : o) + ta }) } if (za && R) { I = I - da; za.attr({ height: bb(I), y: (I > 0 ? 0 : I) + da }) } 
                            } 
                        } else if (!ba) {
                            var B; I = l.hoverPoint; o = l.hoverSeries; var D, ca, la = $a, qa = va ? s.chartY : s.chartX - X; if (hc && p.shared) {
                                B = []; D = Ha.length; for (ca = 0; ca < D; ca++) if (Ha[ca].visible && Ha[ca].tooltipPoints.length) { s = Ha[ca].tooltipPoints[qa]; s._dist = bb(qa - s.plotX); la = tb(la, s._dist); B.push(s) } for (D =
B.length; D--; ) B[D]._dist > la && B.splice(D, 1); if (B.length && B[0].plotX !== sd) { hc.refresh(B); sd = B[0].plotX } 
                            } if (o && o.tracker) (s = o.tooltipPoints[qa]) && s !== I && s.onMouseOver()
                        } return ba || !sc
                    } 
                }; oa.onmousemove = L; Qa(oa, "mouseleave", x); Qa(ua, "mousemove", N); oa.ontouchstart = function (s) { if (ab || xa) oa.onmousedown(s); L(s) }; oa.ontouchmove = L; oa.ontouchend = function () { Ma && x() }; oa.onclick = function (s) {
                    var o = l.hoverPoint; s = q(s); s.cancelBubble = true; if (!Ma) if (o && Ga(s.target, "isTracker")) {
                        var I = o.plotX, ba = o.plotY; sa(o, { pageX: Jb.left +
X + (va ? Da - ba : I), pageY: Jb.top + ea + (va ? Aa - I : ba)
                        }); Pa(o.series, "click", sa(s, { point: o })); o.firePointEvent("click", s)
                    } else { sa(s, w(s)); gc(s.chartX - X, s.chartY - ea) && Pa(l, "click", s) } Ma = false
                } 
            })(); Vd = setInterval(function () { rd && rd() }, 32); sa(this, { zoomX: ab, zoomY: xa, resetTracker: x, destroy: function () { if (l.trackerGroup) l.trackerGroup = Ec = l.trackerGroup.destroy(); pb(ua, "mousemove", N); oa.onclick = oa.onmousedown = oa.onmousemove = oa.ontouchstart = oa.ontouchend = oa.ontouchmove = null } })
        } function g(p) {
            var q = p.type || z.type || z.defaultSeriesType,
w = wb[q], x = l.hasRendered; if (x) if (va && q === "column") w = wb.bar; else if (!va && q === "bar") w = wb.column; q = new w; q.init(l, p); if (!x && q.inverted) va = true; if (q.isCartesian) sc = q.isCartesian; Ha.push(q); return q
        } function h() { z.alignTicks !== false && u(Va, function (p) { p.adjustTickAmount() }); Ob = null } function i(p) {
            var q = l.isDirtyLegend, w, x = l.isDirtyBox, V = Ha.length, N = V, ta = l.clipRect; for (oc(p, l); N--; ) { p = Ha[N]; if (p.isDirty && p.options.stacking) { w = true; break } } if (w) for (N = V; N--; ) { p = Ha[N]; if (p.options.stacking) p.isDirty = true } u(Ha,
function (da) { if (da.isDirty) { da.cleanData(); da.getSegments(); if (da.options.legendType === "point") q = true } }); if (q && Fc.renderLegend) { Fc.renderLegend(); l.isDirtyLegend = false } if (sc) { if (!cd) { Ob = null; u(Va, function (da) { da.setScale() }) } h(); Gc(); u(Va, function (da) { if (da.isDirty || x) { da.redraw(); x = true } }) } if (x) { vd(); bd(); if (ta) { Hc(ta); ta.animate({ width: l.plotSizeX, height: l.plotSizeY }) } } u(Ha, function (da) { if (da.isDirty && da.visible && (!da.isCartesian || da.xAxis)) da.redraw() }); Yb && Yb.resetTracker && Yb.resetTracker(); Pa(l,
"redraw")
        } function j() { var p = a.xAxis || {}, q = a.yAxis || {}, w; p = zc(p); u(p, function (x, V) { x.index = V; x.isX = true }); q = zc(q); u(q, function (x, V) { x.index = V }); Va = p.concat(q); l.xAxis = []; l.yAxis = []; Va = tc(Va, function (x) { w = new c(x); l[w.isXAxis ? "xAxis" : "yAxis"].push(w); return w }); h() } function m(p, q) {
            uc = Ca(a.title, p); Ic = Ca(a.subtitle, q); u([["title", p, uc], ["subtitle", q, Ic]], function (w) {
                var x = w[0], V = l[x], N = w[1]; w = w[2]; if (V && N) V = V.destroy(); if (w && w.text && !V) l[x] = ga.text(w.text, 0, 0, w.useHTML).attr({ align: w.align, "class": "highcharts-" +
x, zIndex: 1
                }).css(w.style).add().align(w, false, Rb)
            })
        } function v() {
            qb = z.renderTo; Wd = vc + wd++; if (Sb(qb)) qb = ua.getElementById(qb); qb.innerHTML = ""; if (!qb.offsetWidth) { Zb = qb.cloneNode(0); Ja(Zb, { position: ic, top: "-9999px", display: "" }); ua.body.appendChild(Zb) } dd = (Zb || qb).offsetWidth; Jc = (Zb || qb).offsetHeight; l.chartWidth = $a = z.width || dd || 600; l.chartHeight = cb = z.height || (Jc > 19 ? Jc : 400); l.container = oa = hb(Tb, { className: "highcharts-container" + (z.className ? " " + z.className : ""), id: Wd }, sa({ position: Xd, overflow: ob, width: $a +
Ua, height: cb + Ua, textAlign: "left"
            }, z.style), Zb || qb); l.renderer = ga = z.forExport ? new ed(oa, $a, cb, true) : new fd(oa, $a, cb); var p, q; if (Yd && oa.getBoundingClientRect) { p = function () { Ja(oa, { left: 0, top: 0 }); q = oa.getBoundingClientRect(); Ja(oa, { left: -(q.left - ja(q.left)) + Ua, top: -(q.top - ja(q.top)) + Ua }) }; p(); Qa(db, "resize", p); Qa(l, "destroy", function () { pb(db, "resize", p) }) } 
        } function P() {
            function p() {
                var w = z.width || qb.offsetWidth, x = z.height || qb.offsetHeight; if (w && x) {
                    if (w !== dd || x !== Jc) {
                        clearTimeout(q); q = setTimeout(function () {
                            xd(w,
x, false)
                        }, 100)
                    } dd = w; Jc = x
                } 
            } var q; Qa(db, "resize", p); Qa(l, "destroy", function () { pb(db, "resize", p) })
        } function T() { Pa(l, "endResize", null, function () { cd -= 1 }) } function Y() {
            var p = a.labels, q = a.credits, w; m(); Fc = l.legend = new le; Gc(); u(Va, function (x) { x.setTickPositions(true) }); h(); Gc(); vd(); sc && u(Va, function (x) { x.render() }); if (!l.seriesGroup) l.seriesGroup = ga.g("series-group").attr({ zIndex: 3 }).add(); u(Ha, function (x) { x.translate(); x.setTooltipPoints(); x.render() }); p.items && u(p.items, function () {
                var x = sa(p.style, this.style),
V = ja(x.left) + X, N = ja(x.top) + ea + 12; delete x.left; delete x.top; ga.text(this.html, V, N).attr({ zIndex: 2 }).css(x).add()
            }); if (!l.toolbar) l.toolbar = d(); if (q.enabled && !l.credits) { w = q.href; l.credits = ga.text(q.text, 0, 0).on("click", function () { if (w) location.href = w }).attr({ align: q.position.align, zIndex: 8 }).css(q.style).add().align(q.position) } bd(); l.hasRendered = true; if (Zb) { qb.appendChild(oa); pc(Zb) } 
        } function H() {
            var p, q = oa && oa.parentNode; if (l !== null) {
                Pa(l, "destroy"); pb(db, "unload", H); pb(l); for (p = Va.length; p--; ) Va[p] =
Va[p].destroy(); for (p = Ha.length; p--; ) Ha[p] = Ha[p].destroy(); u(["title", "subtitle", "seriesGroup", "clipRect", "credits", "tracker"], function (w) { var x = l[w]; if (x) l[w] = x.destroy() }); u([wc, xc, Kc, Fc, hc, ga, Yb], function (w) { w && w.destroy && w.destroy() }); wc = xc = Kc = Fc = hc = ga = Yb = null; if (oa) { oa.innerHTML = ""; pb(oa); q && pc(oa); oa = null } clearInterval(Vd); for (p in l) delete l[p]; l = null
            } 
        } function U() {
            if (!Lc && db == db.top && ua.readyState !== "complete") ua.attachEvent("onreadystatechange", function () {
                ua.detachEvent("onreadystatechange",
U); ua.readyState === "complete" && U()
            }); else { v(); yd(); zd(); u(a.series || [], function (p) { g(p) }); l.inverted = va = A(va, a.chart.inverted); j(); l.render = Y; l.tracker = Yb = new f(a.tooltip); Y(); Pa(l, "load"); b && b.apply(l, [l]); u(l.callbacks, function (p) { p.apply(l, [l]) }) } 
        } Yc = Ca(Yc, Xa.xAxis); od = Ca(od, Xa.yAxis); Xa.xAxis = Xa.yAxis = null; a = Ca(Xa, a); var z = a.chart, M = z.margin; M = Nb(M) ? M : [M, M, M, M]; var y = A(z.marginTop, M[0]), C = A(z.marginRight, M[1]), Z = A(z.marginBottom, M[2]), Sa = A(z.marginLeft, M[3]), Na = z.spacingTop, Ea = z.spacingRight,
gb = z.spacingBottom, Lb = z.spacingLeft, Rb, uc, Ic, ea, Ib, vb, X, Xb, qb, Zb, oa, Wd, dd, Jc, $a, cb, qd, ad, wc, Kc, Ad, xc, l = this, ke = (M = z.events) && !!M.click, Bd, gc, hc, ud, jc, Zd, Cd, Aa, Da, Yb, Ec, bd, Fc, $b, ac, Jb, sc = z.showAxes, cd = 0, Va = [], Ob, Ha = [], va, ga, rd, Vd, sd, vd, Gc, yd, zd, xd, td, $d, le = function () {
    function p(G, ha) { var na = G.legendItem, Ra = G.legendLine, La = G.legendSymbol, pa = Oa.color, wa = ha ? N.itemStyle.color : pa, zb = ha ? G.color : pa; pa = ha ? G.pointAttr[ib] : { stroke: pa, fill: pa }; na && na.css({ fill: wa }); Ra && Ra.attr({ stroke: zb }); La && La.attr(pa) } function q(G,
ha, na) { var Ra = G.legendItem, La = G.legendLine, pa = G.legendSymbol; G = G.checkbox; Ra && Ra.attr({ x: ha, y: na }); La && La.translate(ha, na - 4); pa && pa.attr({ x: ha + pa.xOff, y: na + pa.yOff }); if (G) { G.x = ha; G.y = na } } function w() { u(za, function (G) { var ha = G.checkbox, na = qa.alignAttr; ha && Ja(ha, { left: na.translateX + G.legendItemWidth + ha.x - 40 + Ua, top: na.translateY + ha.y - 11 + Ua }) }) } function x(G) {
    var ha, na, Ra, La, pa = G.legendItem; La = G.series || G; var wa = La.options, zb = wa && wa.borderWidth || 0; if (!pa) {
        La = /^(bar|pie|area|column)$/.test(La.type); G.legendItem =
pa = ga.text(N.labelFormatter.call(G), 0, 0).css(G.visible ? ab : Oa).on("mouseover", function () { G.setState(Bb); pa.css(xa) }).on("mouseout", function () { pa.css(G.visible ? ab : Oa); G.setState() }).on("click", function () { var Gb = function () { G.setVisible() }; G.firePointEvent ? G.firePointEvent("legendItemClick", null, Gb) : Pa(G, "legendItemClick", null, Gb) }).attr({ zIndex: 2 }).add(qa); if (!La && wa && wa.lineWidth) {
            var Vb = { "stroke-width": wa.lineWidth, zIndex: 2 }; if (wa.dashStyle) Vb.dashstyle = wa.dashStyle; G.legendLine = ga.path([Za, -da - Ma,
0, Ka, -Ma, 0]).attr(Vb).add(qa)
        } if (La) ha = ga.rect(na = -da - Ma, Ra = -11, da, 12, 2).attr({ zIndex: 3 }).add(qa); else if (wa && wa.marker && wa.marker.enabled) ha = ga.symbol(G.symbol, na = -da / 2 - Ma, Ra = -4, wa.marker.radius).attr({ zIndex: 3 }).add(qa); if (ha) { ha.xOff = na + zb % 2 / 2; ha.yOff = Ra + zb % 2 / 2 } G.legendSymbol = ha; p(G, G.visible); if (wa && wa.showCheckbox) {
            G.checkbox = hb("input", { type: "checkbox", checked: G.selected, defaultChecked: G.selected }, N.itemCheckboxStyle, oa); Qa(G.checkbox, "click", function (Gb) {
                Pa(G, "checkboxClick", { checked: Gb.target.checked },
function () { G.select() })
            })
        } 
    } ha = pa.getBBox(); na = G.legendItemWidth = N.itemWidth || da + Ma + ha.width + R; B = ha.height; if (ta && o - s + na > (fb || $a - 2 * R - s)) { o = s; I += B } ba = I; q(G, o, I); if (ta) o += na; else I += B; ya = fb || Ia(ta ? o - s : na, ya)
} function V() {
    o = s; I = L; ba = ya = 0; qa || (qa = ga.g("legend").attr({ zIndex: 7 }).add()); za = []; u(Hb, function (Ra) { var La = Ra.options; if (La.showInLegend) za = za.concat(La.legendType === "point" ? Ra.data : Ra) }); Hd(za, function (Ra, La) { return (Ra.options.legendIndex || 0) - (La.options.legendIndex || 0) }); cc && za.reverse(); u(za,
x); $b = fb || ya; ac = ba - L + B; if (ca || la) { $b += 2 * R; ac += 2 * R; if (D) { if ($b > 0 && ac > 0) { D[D.isNew ? "attr" : "animate"](D.crisp(null, null, null, $b, ac)); D.isNew = false } } else { D = ga.rect(0, 0, $b, ac, N.borderRadius, ca || 0).attr({ stroke: N.borderColor, "stroke-width": ca || 0, fill: la || jb }).add(qa).shadow(N.shadow); D.isNew = true } D[za.length ? "show" : "hide"]() } for (var G = ["left", "right", "top", "bottom"], ha, na = 4; na--; ) { ha = G[na]; if (eb[ha] && eb[ha] !== "auto") { N[na < 2 ? "align" : "verticalAlign"] = ha; N[na < 2 ? "x" : "y"] = ja(eb[ha]) * (na % 2 ? -1 : 1) } } za.length &&
qa.align(sa(N, { width: $b, height: ac }), true, Rb); cd || w()
} var N = l.options.legend; if (N.enabled) {
        var ta = N.layout === "horizontal", da = N.symbolWidth, Ma = N.symbolPadding, za, eb = N.style, ab = N.itemStyle, xa = N.itemHoverStyle, Oa = N.itemHiddenStyle, R = ja(eb.padding), L = 18, s = 4 + R + da + Ma, o, I, ba, B = 0, D, ca = N.borderWidth, la = N.backgroundColor, qa, ya, fb = N.width, Hb = l.series, cc = N.reversed; V(); Qa(l, "endResize", w); return { colorizeItem: p, destroyItem: function (G) {
            var ha = G.checkbox; u(["legendItem", "legendLine", "legendSymbol"], function (na) {
                G[na] &&
G[na].destroy()
            }); ha && pc(G.checkbox)
        }, renderLegend: V, destroy: function () { if (D) D = D.destroy(); if (qa) qa = qa.destroy() } 
        }
    } 
}; gc = function (p, q) { return p >= 0 && p <= Da && q >= 0 && q <= Aa }; $d = function () { Pa(l, "selection", { resetSelection: true }, td); l.toolbar.remove("zoom") }; td = function (p) {
    var q = Xa.lang, w = l.pointCount < 100; l.toolbar.add("zoom", q.resetZoom, q.resetZoomTitle, $d); !p || p.resetSelection ? u(Va, function (x) { x.setExtremes(null, null, false, w) }) : u(p.xAxis.concat(p.yAxis), function (x) {
        var V = x.axis; if (l.tracker[V.isXAxis ? "zoomX" :
"zoomY"]) V.setExtremes(x.min, x.max, false, w)
    }); i()
}; Gc = function () {
    var p = a.legend, q = A(p.margin, 10), w = p.x, x = p.y, V = p.align, N = p.verticalAlign, ta; yd(); if ((l.title || l.subtitle) && !K(y)) if (ta = Ia(l.title && !uc.floating && !uc.verticalAlign && uc.y || 0, l.subtitle && !Ic.floating && !Ic.verticalAlign && Ic.y || 0)) ea = Ia(ea, ta + A(uc.margin, 15) + Na); if (p.enabled && !p.floating) if (V === "right") K(C) || (Ib = Ia(Ib, $b - w + q + Ea)); else if (V === "left") K(Sa) || (X = Ia(X, $b + w + q + Lb)); else if (N === "top") K(y) || (ea = Ia(ea, ac + x + q + Na)); else if (N === "bottom") K(Z) ||
(vb = Ia(vb, ac - x + q + gb)); sc && u(Va, function (da) { da.getOffset() }); K(Sa) || (X += Xb[3]); K(y) || (ea += Xb[0]); K(Z) || (vb += Xb[2]); K(C) || (Ib += Xb[1]); zd()
}; xd = function (p, q, w) {
    var x = l.title, V = l.subtitle; cd += 1; oc(w, l); ad = cb; qd = $a; l.chartWidth = $a = W(p); l.chartHeight = cb = W(q); Ja(oa, { width: $a + Ua, height: cb + Ua }); ga.setSize($a, cb, w); Da = $a - X - Ib; Aa = cb - ea - vb; Ob = null; u(Va, function (N) { N.isDirty = true; N.setScale() }); u(Ha, function (N) { N.isDirty = true }); l.isDirtyLegend = true; l.isDirtyBox = true; Gc(); x && x.align(null, null, Rb); V && V.align(null,
null, Rb); i(w); ad = null; Pa(l, "resize"); Bc === false ? T() : setTimeout(T, Bc && Bc.duration || 500)
}; zd = function () { l.plotLeft = X = W(X); l.plotTop = ea = W(ea); l.plotWidth = Da = W($a - X - Ib); l.plotHeight = Aa = W(cb - ea - vb); l.plotSizeX = va ? Aa : Da; l.plotSizeY = va ? Da : Aa; Rb = { x: Lb, y: Na, width: $a - Lb - Ea, height: cb - Na - gb} }; yd = function () { ea = A(y, Na); Ib = A(C, Ea); vb = A(Z, gb); X = A(Sa, Lb); Xb = [0, 0, 0, 0] }; vd = function () {
    var p = z.borderWidth || 0, q = z.backgroundColor, w = z.plotBackgroundColor, x = z.plotBackgroundImage, V, N = { x: X, y: ea, width: Da, height: Aa }; V = p + (z.shadow ?
8 : 0); if (p || q) if (wc) wc.animate(wc.crisp(null, null, null, $a - V, cb - V)); else wc = ga.rect(V / 2, V / 2, $a - V, cb - V, z.borderRadius, p).attr({ stroke: z.borderColor, "stroke-width": p, fill: q || jb }).add().shadow(z.shadow); if (w) if (Kc) Kc.animate(N); else Kc = ga.rect(X, ea, Da, Aa, 0).attr({ fill: w }).add().shadow(z.plotShadow); if (x) if (Ad) Ad.animate(N); else Ad = ga.image(x, X, ea, Da, Aa).add(); if (z.plotBorderWidth) if (xc) xc.animate(xc.crisp(null, X, ea, Da, Aa)); else xc = ga.rect(X, ea, Da, Aa, 0, z.plotBorderWidth).attr({ stroke: z.plotBorderColor,
    "stroke-width": z.plotBorderWidth, zIndex: 4
}).add(); l.isDirtyBox = false
}; Qa(db, "unload", H); z.reflow !== false && Qa(l, "load", P); if (M) for (Bd in M) Qa(l, Bd, M[Bd]); l.options = a; l.series = Ha; l.addSeries = function (p, q, w) { var x; if (p) { oc(w, l); q = A(q, true); Pa(l, "addSeries", { options: p }, function () { x = g(p); x.isDirty = true; l.isDirtyLegend = true; q && l.redraw() }) } return x }; l.animation = A(z.animation, true); l.destroy = H; l.get = function (p) {
    var q, w, x; for (q = 0; q < Va.length; q++) if (Va[q].options.id === p) return Va[q]; for (q = 0; q < Ha.length; q++) if (Ha[q].options.id ===
p) return Ha[q]; for (q = 0; q < Ha.length; q++) { x = Ha[q].data; for (w = 0; w < x.length; w++) if (x[w].id === p) return x[w] } return null
}; l.getSelectedPoints = function () { var p = []; u(Ha, function (q) { p = p.concat(Dd(q.data, function (w) { return w.selected })) }); return p }; l.getSelectedSeries = function () { return Dd(Ha, function (p) { return p.selected }) }; l.hideLoading = function () { gd(jc, { opacity: 0 }, { duration: a.loading.hideDuration, complete: function () { Ja(jc, { display: jb }) } }); Cd = false }; l.isInsidePlot = gc; l.redraw = i; l.setSize = xd; l.setTitle = m; l.showLoading =
function (p) { var q = a.loading; if (!jc) { jc = hb(Tb, { className: "highcharts-loading" }, sa(q.style, { left: X + Ua, top: ea + Ua, width: Da + Ua, height: Aa + Ua, zIndex: 10, display: jb }), oa); Zd = hb("span", null, q.labelStyle, jc) } Zd.innerHTML = p || a.lang.loading; if (!Cd) { Ja(jc, { opacity: 0, display: "" }); gd(jc, { opacity: q.style.opacity }, { duration: q.showDuration }); Cd = true } }; l.pointCount = 0; l.counters = new Gd; U()
    } var ua = document, db = window, Fa = Math, W = Fa.round, lb = Fa.floor, md = Fa.ceil, Ia = Fa.max, tb = Fa.min, bb = Fa.abs, rb = Fa.cos, Cb = Fa.sin, kc = Fa.PI, ae =
kc * 2 / 360, yc = navigator.userAgent, Pc = /msie/i.test(yc) && !db.opera, Mc = ua.documentMode === 8, Ud = /AppleWebKit/.test(yc), Yd = /Firefox/.test(yc), Lc = !!ua.createElementNS && !!ua.createElementNS("http://www.w3.org/2000/svg", "svg").createSVGRect, me = Yd && parseInt(yc.split("Firefox/")[1], 10) < 4, fd, Kb = ua.documentElement.ontouchstart !== undefined, be = {}, wd = 0, ub = 1, Tc, Xa, Zc, Bc, Nc, Wa, Tb = "div", ic = "absolute", Xd = "relative", ob = "hidden", vc = "highcharts-", Ab = "visible", Ua = "px", jb = "none", Za = "M", Ka = "L", ce = "rgba(192,192,192," + (Lc ? 1.0E-6 :
0.0020) + ")", ib = "", Bb = "hover", Qc, id, jd, kd, Cc, Rc, Sc, Jd, Kd, ld, Ld, Md, ma = db.HighchartsAdapter, Db = ma || {}, u = Db.each, Dd = Db.grep, tc = Db.map, Ca = Db.merge, Qa = Db.addEvent, pb = Db.removeEvent, Pa = Db.fireEvent, gd = Db.animate, Hc = Db.stop, wb = {}; Zc = function (a, b, c) {
    function d(P) { return P.toString().replace(/^([0-9])$/, "0$1") } if (!K(b) || isNaN(b)) return "Invalid date"; a = A(a, "%Y-%m-%d %H:%M:%S"); b = new Date(b * ub); var e, f = b[jd](), g = b[kd](), h = b[Cc](), i = b[Rc](), j = b[Sc](), m = Xa.lang, v = m.weekdays; b = { a: v[g].substr(0, 3), A: v[g], d: d(h),
        e: h, b: m.shortMonths[i], B: m.months[i], m: d(i + 1), y: j.toString().substr(2, 2), Y: j, H: d(f), I: d(f % 12 || 12), l: f % 12 || 12, M: d(b[id]()), p: f < 12 ? "AM" : "PM", P: f < 12 ? "am" : "pm", S: d(b.getSeconds())
    }; for (e in b) a = a.replace("%" + e, b[e]); return c ? a.substr(0, 1).toUpperCase() + a.substr(1) : a
}; Gd.prototype = { wrapColor: function (a) { if (this.color >= a) this.color = 0 }, wrapSymbol: function (a) { if (this.symbol >= a) this.symbol = 0 } }; Nc = { init: function (a, b, c) {
    b = b || ""; var d = a.shift, e = b.indexOf("C") > -1, f = e ? 7 : 3, g; b = b.split(" "); c = [].concat(c); var h,
i, j = function (m) { for (g = m.length; g--; ) m[g] === Za && m.splice(g + 1, 0, m[g + 1], m[g + 2], m[g + 1], m[g + 2]) }; if (e) { j(b); j(c) } if (a.isArea) { h = b.splice(b.length - 6, 6); i = c.splice(c.length - 6, 6) } if (d) { c = [].concat(c).splice(0, f).concat(c); a.shift = false } if (b.length) for (a = c.length; b.length < a; ) { d = [].concat(b).splice(b.length - f, f); if (e) { d[f - 6] = d[f - 2]; d[f - 5] = d[f - 1] } b = b.concat(d) } if (h) { b = b.concat(h); c = c.concat(i) } return [b, c]
}, step: function (a, b, c, d) {
    var e = [], f = a.length; if (c === 1) e = d; else if (f === b.length && c < 1) for (; f--; ) {
        d = parseFloat(a[f]);
        e[f] = isNaN(d) ? a[f] : c * parseFloat(b[f] - d) + d
    } else e = b; return e
} 
}; ma && ma.init && ma.init(Nc); if (!ma && db.jQuery) {
        var Mb = jQuery; u = function (a, b) { for (var c = 0, d = a.length; c < d; c++) if (b.call(a[c], a[c], c, a) === false) return c }; Dd = Mb.grep; tc = function (a, b) { for (var c = [], d = 0, e = a.length; d < e; d++) c[d] = b.call(a[d], a[d], d, a); return c }; Ca = function () { var a = arguments; return Mb.extend(true, null, a[0], a[1], a[2], a[3]) }; Qa = function (a, b, c) { Mb(a).bind(b, c) }; pb = function (a, b, c) {
            var d = ua.removeEventListener ? "removeEventListener" : "detachEvent";
            if (ua[d] && !a[d]) a[d] = function () { }; Mb(a).unbind(b, c)
        }; Pa = function (a, b, c, d) { var e = Mb.Event(b), f = "detached" + b; sa(e, c); if (a[b]) { a[f] = a[b]; a[b] = null } Mb(a).trigger(e); if (a[f]) { a[b] = a[f]; a[f] = null } d && !e.isDefaultPrevented() && d(e) }; gd = function (a, b, c) { var d = Mb(a); if (b.d) { a.toD = b.d; b.d = 1 } d.stop(); d.animate(b, c) }; Hc = function (a) { Mb(a).stop() }; Mb.extend(Mb.easing, { easeOutQuad: function (a, b, c, d, e) { return -d * (b /= e) * (b - 2) + c } }); var de = jQuery.fx, ee = de.step; u(["cur", "_default", "width", "height"], function (a, b) {
            var c = b ?
ee : de.prototype, d = c[a], e; if (d) c[a] = function (f) { f = b ? f : this; e = f.elem; return e.attr ? e.attr(f.prop, f.now) : d.apply(this, arguments) } 
        }); ee.d = function (a) { var b = a.elem; if (!a.started) { var c = Nc.init(b, b.d, b.toD); a.start = c[0]; a.end = c[1]; a.started = true } b.attr("d", Nc.step(a.start, a.end, a.pos, b.toD)) } 
    } ma = { enabled: true, align: "center", x: 0, y: 15, style: { color: "#666", fontSize: "11px", lineHeight: "14px"} }; Xa = { colors: ["#4572A7", "#AA4643", "#89A54E", "#80699B", "#3D96AE", "#DB843D", "#92A8CD", "#A47D7C", "#B5CA92"], symbols: ["circle",
"diamond", "square", "triangle", "triangle-down"], lang: { loading: "Loading...", months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "June", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], weekdays: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], decimalPoint: ".", resetZoom: "Reset zoom", resetZoomTitle: "Reset zoom level 1:1", thousandsSep: "," }, global: { useUTC: true }, chart: { borderColor: "#4572A7",
    borderRadius: 5, defaultSeriesType: "line", ignoreHiddenSeries: true, spacingTop: 10, spacingRight: 10, spacingBottom: 15, spacingLeft: 10, style: { fontFamily: '"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif', fontSize: "12px" }, backgroundColor: "#FFFFFF", plotBorderColor: "#C0C0C0"
}, title: { text: "Chart title", align: "center", y: 15, style: { color: "#3E576F", fontSize: "16px"} }, subtitle: { text: "", align: "center", y: 30, style: { color: "#6D869F"} }, plotOptions: { line: { allowPointSelect: false, showCheckbox: false,
    animation: { duration: 1E3 }, events: {}, lineWidth: 2, shadow: true, marker: { enabled: true, lineWidth: 0, radius: 4, lineColor: "#FFFFFF", states: { hover: {}, select: { fillColor: "#FFFFFF", lineColor: "#000000", lineWidth: 2}} }, point: { events: {} }, dataLabels: Ca(ma, { enabled: false, y: -6, formatter: function () { return this.y } }), showInLegend: true, states: { hover: { marker: {} }, select: { marker: {}} }, stickyTracking: true
}
}, labels: { style: { position: ic, color: "#3E576F"} }, legend: { enabled: true, align: "center", layout: "horizontal", labelFormatter: function () { return this.name },
    borderWidth: 1, borderColor: "#909090", borderRadius: 5, shadow: false, style: { padding: "5px" }, itemStyle: { cursor: "pointer", color: "#3E576F" }, itemHoverStyle: { cursor: "pointer", color: "#000000" }, itemHiddenStyle: { color: "#C0C0C0" }, itemCheckboxStyle: { position: ic, width: "13px", height: "13px" }, symbolWidth: 16, symbolPadding: 5, verticalAlign: "bottom", x: 0, y: 0
}, loading: { hideDuration: 100, labelStyle: { fontWeight: "bold", position: Xd, top: "1em" }, showDuration: 100, style: { position: ic, backgroundColor: "white", opacity: 0.5, textAlign: "center"} },
        tooltip: { enabled: true, backgroundColor: "rgba(255, 255, 255, .85)", borderWidth: 2, borderRadius: 5, shadow: true, snap: Kb ? 25 : 10, style: { color: "#333333", fontSize: "12px", padding: "5px", whiteSpace: "nowrap"} }, toolbar: { itemStyle: { color: "#4572A7", cursor: "pointer"} }, credits: { enabled: true, text: "Highcharts.com", href: "http://www.highcharts.com", position: { align: "right", x: -10, verticalAlign: "bottom", y: -5 }, style: { cursor: "pointer", color: "#909090", fontSize: "10px"}}
    }; var Yc = { dateTimeLabelFormats: { second: "%H:%M:%S", minute: "%H:%M",
        hour: "%H:%M", day: "%e. %b", week: "%e. %b", month: "%b '%y", year: "%Y"
    }, endOnTick: false, gridLineColor: "#C0C0C0", labels: ma, lineColor: "#C0D0E0", lineWidth: 1, max: null, min: null, minPadding: 0.01, maxPadding: 0.01, minorGridLineColor: "#E0E0E0", minorGridLineWidth: 1, minorTickColor: "#A0A0A0", minorTickLength: 2, minorTickPosition: "outside", startOfWeek: 1, startOnTick: false, tickColor: "#C0D0E0", tickLength: 5, tickmarkPlacement: "between", tickPixelInterval: 100, tickPosition: "outside", tickWidth: 1, title: { align: "middle", style: { color: "#6D869F",
        fontWeight: "bold"
    }
    }, type: "linear"
    }, od = Ca(Yc, { endOnTick: true, gridLineWidth: 1, tickPixelInterval: 72, showLastLabel: true, labels: { align: "right", x: -8, y: 3 }, lineWidth: 0, maxPadding: 0.05, minPadding: 0.05, startOnTick: true, tickWidth: 0, title: { rotation: 270, text: "Y-values" }, stackLabels: { enabled: false, formatter: function () { return this.total }, style: ma.style} }), ie = { labels: { align: "right", x: -8, y: null }, title: { rotation: 270} }, he = { labels: { align: "left", x: 8, y: null }, title: { rotation: 90} }, Td = { labels: { align: "center", x: 0, y: 14 }, title: { rotation: 0} },
ge = Ca(Td, { labels: { y: -5} }), xb = Xa.plotOptions; ma = xb.line; xb.spline = Ca(ma); xb.scatter = Ca(ma, { lineWidth: 0, states: { hover: { lineWidth: 0}} }); xb.area = Ca(ma, {}); xb.areaspline = Ca(xb.area); xb.column = Ca(ma, { borderColor: "#FFFFFF", borderWidth: 1, borderRadius: 0, groupPadding: 0.2, marker: null, pointPadding: 0.1, minPointLength: 0, states: { hover: { brightness: 0.1, shadow: false }, select: { color: "#C0C0C0", borderColor: "#000000", shadow: false} }, dataLabels: { y: null, verticalAlign: null} }); xb.bar = Ca(xb.column, { dataLabels: { align: "left", x: 5,
    y: 0
}
}); xb.pie = Ca(ma, { borderColor: "#FFFFFF", borderWidth: 1, center: ["50%", "50%"], colorByPoint: true, dataLabels: { distance: 30, enabled: true, formatter: function () { return this.point.name }, y: 5 }, legendType: "point", marker: null, size: "75%", showInLegend: false, slicedOffset: 10, states: { hover: { brightness: 0.1, shadow: false}} }); Id(); var bc = function (a) {
    var b = [], c; (function (d) {
        if (c = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/.exec(d)) b = [ja(c[1]), ja(c[2]), ja(c[3]), parseFloat(c[4],
10)]; else if (c = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(d)) b = [ja(c[1], 16), ja(c[2], 16), ja(c[3], 16), 1]
    })(a); return { get: function (d) { return b && !isNaN(b[0]) ? d === "rgb" ? "rgb(" + b[0] + "," + b[1] + "," + b[2] + ")" : d === "a" ? b[3] : "rgba(" + b.join(",") + ")" : a }, brighten: function (d) { if (lc(d) && d !== 0) { var e; for (e = 0; e < 3; e++) { b[e] += ja(d * 255); if (b[e] < 0) b[e] = 0; if (b[e] > 255) b[e] = 255 } } return this }, setOpacity: function (d) { b[3] = d; return this } }
}; Uc.prototype = { init: function (a, b) {
    this.element = ua.createElementNS("http://www.w3.org/2000/svg",
b); this.renderer = a
}, animate: function (a, b, c) { if (b = A(b, Bc, true)) { b = Ca(b); if (c) b.complete = c; gd(this, a, b) } else { this.attr(a); c && c() } }, attr: function (a, b) {
    var c, d, e, f, g = this.element, h = g.nodeName, i = this.renderer, j, m = this.shadows, v = this.htmlNode, P, T = this; if (Sb(a) && K(b)) { c = a; a = {}; a[c] = b } if (Sb(a)) { c = a; if (h === "circle") c = { x: "cx", y: "cy"}[c] || c; else if (c === "strokeWidth") c = "stroke-width"; T = Ga(g, c) || this[c] || 0; if (c !== "d" && c !== "visibility") T = parseFloat(T) } else for (c in a) {
        j = false; d = a[c]; if (c === "d") {
            if (d && d.join) d =
d.join(" "); if (/(NaN| {2}|^$)/.test(d)) d = "M 0 0"; this.d = d
        } else if (c === "x" && h === "text") { for (e = 0; e < g.childNodes.length; e++) { f = g.childNodes[e]; Ga(f, "x") === Ga(g, "x") && Ga(f, "x", d) } if (this.rotation) Ga(g, "transform", "rotate(" + this.rotation + " " + d + " " + ja(a.y || Ga(g, "y")) + ")") } else if (c === "fill") d = i.color(d, g, c); else if (h === "circle" && (c === "x" || c === "y")) c = { x: "cx", y: "cy"}[c] || c; else if (c === "translateX" || c === "translateY" || c === "rotation" || c === "verticalAlign") { this[c] = d; this.updateTransform(); j = true } else if (c ===
"stroke") d = i.color(d, g, c); else if (c === "dashstyle") { c = "stroke-dasharray"; d = d && d.toLowerCase(); if (d === "solid") d = jb; else if (d) { d = d.replace("shortdashdotdot", "3,1,1,1,1,1,").replace("shortdashdot", "3,1,1,1").replace("shortdot", "1,1,").replace("shortdash", "3,1,").replace("longdash", "8,3,").replace(/dot/g, "1,3,").replace("dash", "4,3,").replace(/,$/, "").split(","); for (e = d.length; e--; ) d[e] = ja(d[e]) * a["stroke-width"]; d = d.join(",") } } else if (c === "isTracker") this[c] = d; else if (c === "width") d = ja(d); else if (c ===
"align") { c = "text-anchor"; d = { left: "start", center: "middle", right: "end"}[d] } else if (c === "title") { e = ua.createElementNS("http://www.w3.org/2000/svg", "title"); e.appendChild(ua.createTextNode(d)); g.appendChild(e) } if (c === "strokeWidth") c = "stroke-width"; if (Ud && c === "stroke-width" && d === 0) d = 1.0E-6; if (this.symbolName && /^(x|y|r|start|end|innerR)/.test(c)) { if (!P) { this.symbolAttr(a); P = true } j = true } if (m && /^(width|height|visibility|x|y|d)$/.test(c)) for (e = m.length; e--; ) Ga(m[e], c, d); if ((c === "width" || c === "height") && h ===
"rect" && d < 0) d = 0; if (c === "text") { this.textStr = d; this.added && i.buildText(this) } else j || Ga(g, c, d); if (v && (c === "x" || c === "y" || c === "translateX" || c === "translateY" || c === "visibility")) { e = v.length ? v : [this]; f = e.length; var Y; for (Y = 0; Y < f; Y++) { v = e[Y]; j = v.getBBox(); v = v.htmlNode; Ja(v, sa(this.styles, { left: j.x + (this.translateX || 0) + Ua, top: j.y + (this.translateY || 0) + Ua })); c === "visibility" && Ja(v, { visibility: d }) } } 
    } return T
}, symbolAttr: function (a) {
    var b = this; u(["x", "y", "r", "start", "end", "width", "height", "innerR"], function (c) {
        b[c] =
A(a[c], b[c])
    }); b.attr({ d: b.renderer.symbols[b.symbolName](W(b.x * 2) / 2, W(b.y * 2) / 2, b.r, { start: b.start, end: b.end, width: b.width, height: b.height, innerR: b.innerR }) })
}, clip: function (a) { return this.attr("clip-path", "url(" + this.renderer.url + "#" + a.id + ")") }, crisp: function (a, b, c, d, e) {
    var f, g = {}, h = {}, i; a = a || this.strokeWidth || 0; i = a % 2 / 2; h.x = lb(b || this.x || 0) + i; h.y = lb(c || this.y || 0) + i; h.width = lb((d || this.width || 0) - 2 * i); h.height = lb((e || this.height || 0) - 2 * i); h.strokeWidth = a; for (f in h) if (this[f] !== h[f]) this[f] = g[f] = h[f];
    return g
}, css: function (a) { var b = this.element; b = a && a.width && b.nodeName === "text"; var c, d = "", e = function (f, g) { return "-" + g.toLowerCase() }; if (a && a.color) a.fill = a.color; this.styles = a = sa(this.styles, a); if (Pc && !Lc) { b && delete a.width; Ja(this.element, a) } else { for (c in a) d += c.replace(/([A-Z])/g, e) + ":" + a[c] + ";"; this.attr({ style: d }) } b && this.added && this.renderer.buildText(this); return this }, on: function (a, b) { var c = b; if (Kb && a === "click") { a = "touchstart"; c = function (d) { d.preventDefault(); b() } } this.element["on" + a] = c; return this },
    translate: function (a, b) { return this.attr({ translateX: a, translateY: b }) }, invert: function () { this.inverted = true; this.updateTransform(); return this }, updateTransform: function () { var a = this.translateX || 0, b = this.translateY || 0, c = this.inverted, d = this.rotation, e = []; if (c) { a += this.attr("width"); b += this.attr("height") } if (a || b) e.push("translate(" + a + "," + b + ")"); if (c) e.push("rotate(90) scale(-1,1)"); else d && e.push("rotate(" + d + " " + this.x + " " + this.y + ")"); e.length && Ga(this.element, "transform", e.join(" ")) }, toFront: function () {
        var a =
this.element; a.parentNode.appendChild(a); return this
    }, align: function (a, b, c) {
        if (a) { this.alignOptions = a; this.alignByTranslate = b; c || this.renderer.alignedObjects.push(this) } else { a = this.alignOptions; b = this.alignByTranslate } c = A(c, this.renderer); var d = a.align, e = a.verticalAlign, f = (c.x || 0) + (a.x || 0), g = (c.y || 0) + (a.y || 0), h = {}; if (/^(right|center)$/.test(d)) f += (c.width - (a.width || 0)) / { right: 1, center: 2}[d]; h[b ? "translateX" : "x"] = W(f); if (/^(bottom|middle)$/.test(e)) g += (c.height - (a.height || 0)) / ({ bottom: 1, middle: 2}[e] ||
1); h[b ? "translateY" : "y"] = W(g); this[this.placed ? "animate" : "attr"](h); this.placed = true; this.alignAttr = h; return this
    }, getBBox: function () { var a, b, c, d = this.rotation, e = d * ae; try { a = sa({}, this.element.getBBox()) } catch (f) { a = { width: 0, height: 0} } b = a.width; c = a.height; if (d) { a.width = bb(c * Cb(e)) + bb(b * rb(e)); a.height = bb(c * rb(e)) + bb(b * Cb(e)) } return a }, show: function () { return this.attr({ visibility: Ab }) }, hide: function () { return this.attr({ visibility: ob }) }, add: function (a) {
        var b = this.renderer, c = a || b, d = c.element || b.box, e =
d.childNodes, f = this.element, g = Ga(f, "zIndex"); this.parentInverted = a && a.inverted; this.textStr !== undefined && b.buildText(this); if (a && this.htmlNode) { if (!a.htmlNode) a.htmlNode = []; a.htmlNode.push(this) } if (g) { c.handleZ = true; g = ja(g) } if (c.handleZ) for (c = 0; c < e.length; c++) { a = e[c]; b = Ga(a, "zIndex"); if (a !== f && (ja(b) > g || !K(g) && K(b))) { d.insertBefore(f, a); return this } } d.appendChild(f); this.added = true; return this
    }, safeRemoveChild: function (a) { var b = a.parentNode; b && b.removeChild(a) }, destroy: function () {
        var a = this, b = a.element ||
{}, c = a.shadows, d, e; b.onclick = b.onmouseout = b.onmouseover = b.onmousemove = null; Hc(a); if (a.clipPath) a.clipPath = a.clipPath.destroy(); if (a.stops) { for (e = 0; e < a.stops.length; e++) a.stops[e] = a.stops[e].destroy(); a.stops = null } a.safeRemoveChild(b); c && u(c, function (f) { a.safeRemoveChild(f) }); nc(a.renderer.alignedObjects, a); for (d in a) delete a[d]; return null
    }, empty: function () { for (var a = this.element, b = a.childNodes, c = b.length; c--; ) a.removeChild(b[c]) }, shadow: function (a, b) {
        var c = [], d, e, f = this.element, g = this.parentInverted ?
"(-1,-1)" : "(1,1)"; if (a) { for (d = 1; d <= 3; d++) { e = f.cloneNode(0); Ga(e, { isShadow: "true", stroke: "rgb(0, 0, 0)", "stroke-opacity": 0.05 * d, "stroke-width": 7 - 2 * d, transform: "translate" + g, fill: jb }); b ? b.element.appendChild(e) : f.parentNode.insertBefore(e, f); c.push(e) } this.shadows = c } return this
    } 
}; var ed = function () { this.init.apply(this, arguments) }; ed.prototype = { Element: Uc, init: function (a, b, c, d) {
    var e = location, f; f = this.createElement("svg").attr({ xmlns: "http://www.w3.org/2000/svg", version: "1.1" }); a.appendChild(f.element);
    this.box = f.element; this.boxWrapper = f; this.alignedObjects = []; this.url = Pc ? "" : e.href.replace(/#.*?$/, ""); this.defs = this.createElement("defs").add(); this.forExport = d; this.gradients = []; this.setSize(b, c, false)
}, destroy: function () { var a, b = this.gradients, c = this.defs; this.box = null; this.boxWrapper = this.boxWrapper.destroy(); if (b) { for (a = 0; a < b.length; a++) this.gradients[a] = b[a].destroy(); this.gradients = null } if (c) this.defs = c.destroy(); return this.alignedObjects = null }, createElement: function (a) {
    var b = new this.Element;
    b.init(this, a); return b
}, buildText: function (a) {
    for (var b = a.element, c = A(a.textStr, "").toString().replace(/<(b|strong)>/g, '<span style="font-weight:bold">').replace(/<(i|em)>/g, '<span style="font-style:italic">').replace(/<a/g, "<span").replace(/<\/(b|strong|i|em|a)>/g, "</span>").split(/<br.*?>/g), d = b.childNodes, e = /style="([^"]+)"/, f = /href="([^"]+)"/, g = Ga(b, "x"), h = a.styles, i = h && a.useHTML && !this.forExport, j = a.htmlNode, m = h && ja(h.width), v = h && h.lineHeight, P, T = d.length; T--; ) b.removeChild(d[T]); m && !a.added &&
this.box.appendChild(b); u(c, function (Y, H) {
    var U, z = 0, M; Y = Y.replace(/<span/g, "|||<span").replace(/<\/span>/g, "</span>|||"); U = Y.split("|||"); u(U, function (y) {
        if (y !== "" || U.length === 1) {
            var C = {}, Z = ua.createElementNS("http://www.w3.org/2000/svg", "tspan"); e.test(y) && Ga(Z, "style", y.match(e)[1].replace(/(;| |^)color([ :])/, "$1fill$2")); if (f.test(y)) { Ga(Z, "onclick", 'location.href="' + y.match(f)[1] + '"'); Ja(Z, { cursor: "pointer" }) } y = (y.replace(/<(.|\n)*?>/g, "") || " ").replace(/&lt;/g, "<").replace(/&gt;/g, ">"); Z.appendChild(ua.createTextNode(y));
            if (z) C.dx = 3; else C.x = g; if (!z) { if (H) { !Lc && a.renderer.forExport && Ja(Z, { display: "block" }); M = db.getComputedStyle && ja(db.getComputedStyle(P, null).getPropertyValue("line-height")); if (!M || isNaN(M)) M = v || P.offsetHeight || 18; Ga(Z, "dy", M) } P = Z } Ga(Z, C); b.appendChild(Z); z++; if (m) {
                y = y.replace(/-/g, "- ").split(" "); for (var Sa, Na = []; y.length || Na.length; ) {
                    Sa = b.getBBox().width; C = Sa > m; if (!C || y.length === 1) {
                        y = Na; Na = []; if (y.length) {
                            Z = ua.createElementNS("http://www.w3.org/2000/svg", "tspan"); Ga(Z, { dy: v || 16, x: g }); b.appendChild(Z);
                            if (Sa > m) m = Sa
                        } 
                    } else { Z.removeChild(Z.firstChild); Na.unshift(y.pop()) } y.length && Z.appendChild(ua.createTextNode(y.join(" ").replace(/- /g, "-")))
                } 
            } 
        } 
    })
}); if (i) { if (!j) j = a.htmlNode = hb("span", null, sa(h, { position: ic, top: 0, left: 0 }), this.box.parentNode); j.innerHTML = a.textStr; for (T = d.length; T--; ) d[T].style.visibility = ob } 
}, crispLine: function (a, b) { if (a[1] === a[4]) a[1] = a[4] = W(a[1]) + b % 2 / 2; if (a[2] === a[5]) a[2] = a[5] = W(a[2]) + b % 2 / 2; return a }, path: function (a) { return this.createElement("path").attr({ d: a, fill: jb }) }, circle: function (a,
b, c) { a = Nb(a) ? a : { x: a, y: b, r: c }; return this.createElement("circle").attr(a) }, arc: function (a, b, c, d, e, f) { if (Nb(a)) { b = a.y; c = a.r; d = a.innerR; e = a.start; f = a.end; a = a.x } return this.symbol("arc", a || 0, b || 0, c || 0, { innerR: d || 0, start: e || 0, end: f || 0 }) }, rect: function (a, b, c, d, e, f) { if (Nb(a)) { b = a.y; c = a.width; d = a.height; e = a.r; f = a.strokeWidth; a = a.x } e = this.createElement("rect").attr({ rx: e, ry: e, fill: jb }); return e.attr(e.crisp(f, a, b, Ia(c, 0), Ia(d, 0))) }, setSize: function (a, b, c) {
    var d = this.alignedObjects, e = d.length; this.width = a;
    this.height = b; for (this.boxWrapper[A(c, true) ? "animate" : "attr"]({ width: a, height: b }); e--; ) d[e].align()
}, g: function (a) { var b = this.createElement("g"); return K(a) ? b.attr({ "class": vc + a }) : b }, image: function (a, b, c, d, e) { var f = { preserveAspectRatio: jb }; arguments.length > 1 && sa(f, { x: b, y: c, width: d, height: e }); f = this.createElement("image").attr(f); f.element.setAttributeNS ? f.element.setAttributeNS("http://www.w3.org/1999/xlink", "href", a) : f.element.setAttribute("hc-svg-href", a); return f }, symbol: function (a, b, c, d, e) {
    var f,
g = this.symbols[a]; g = g && g(W(b), W(c), d, e); var h = /^url\((.*?)\)$/, i; if (g) { f = this.path(g); sa(f, { symbolName: a, x: b, y: c, r: d }); e && sa(f, e) } else if (h.test(a)) { var j = function (m, v) { m.attr({ width: v[0], height: v[1] }).translate(-W(v[0] / 2), -W(v[1] / 2)) }; i = a.match(h)[1]; a = be[i]; f = this.image(i).attr({ x: b, y: c }); if (a) j(f, a); else { f.attr({ width: 0, height: 0 }); hb("img", { onload: function () { j(f, be[i] = [this.width, this.height]) }, src: i }) } } else f = this.circle(b, c, d); return f
}, symbols: { square: function (a, b, c) {
    c = 0.707 * c; return [Za, a - c,
b - c, Ka, a + c, b - c, a + c, b + c, a - c, b + c, "Z"]
}, triangle: function (a, b, c) { return [Za, a, b - 1.33 * c, Ka, a + c, b + 0.67 * c, a - c, b + 0.67 * c, "Z"] }, "triangle-down": function (a, b, c) { return [Za, a, b + 1.33 * c, Ka, a - c, b - 0.67 * c, a + c, b - 0.67 * c, "Z"] }, diamond: function (a, b, c) { return [Za, a, b - c, Ka, a + c, b, a, b + c, a - c, b, "Z"] }, arc: function (a, b, c, d) { var e = d.start, f = d.end - 1.0E-6, g = d.innerR, h = rb(e), i = Cb(e), j = rb(f); f = Cb(f); d = d.end - e < kc ? 0 : 1; return [Za, a + c * h, b + c * i, "A", c, c, 0, d, 1, a + c * j, b + c * f, Ka, a + g * j, b + g * f, "A", g, g, 0, d, 0, a + g * h, b + g * i, "Z"] } 
}, clipRect: function (a, b,
c, d) { var e = vc + wd++, f = this.createElement("clipPath").attr({ id: e }).add(this.defs); a = this.rect(a, b, c, d, 0).add(f); a.id = e; a.clipPath = f; return a }, color: function (a, b, c) {
    var d, e = /^rgba/; if (a && a.linearGradient) {
        var f = this; b = a.linearGradient; c = vc + wd++; var g, h, i; g = f.createElement("linearGradient").attr({ id: c, gradientUnits: "userSpaceOnUse", x1: b[0], y1: b[1], x2: b[2], y2: b[3] }).add(f.defs); f.gradients.push(g); g.stops = []; u(a.stops, function (j) {
            if (e.test(j[1])) { d = bc(j[1]); h = d.get("rgb"); i = d.get("a") } else { h = j[1]; i = 1 } j =
f.createElement("stop").attr({ offset: j[0], "stop-color": h, "stop-opacity": i }).add(g); g.stops.push(j)
        }); return "url(" + this.url + "#" + c + ")"
    } else if (e.test(a)) { d = bc(a); Ga(b, c + "-opacity", d.get("a")); return d.get("rgb") } else { b.removeAttribute(c + "-opacity"); return a } 
}, text: function (a, b, c, d) { var e = Xa.chart.style; b = W(A(b, 0)); c = W(A(c, 0)); a = this.createElement("text").attr({ x: b, y: c, text: a }).css({ fontFamily: e.fontFamily, fontSize: e.fontSize }); a.x = b; a.y = c; a.useHTML = d; return a } 
}; fd = ed; if (!Lc) {
        Db = yb(Uc, { init: function (a,
b) { var c = ["<", b, ' filled="f" stroked="f"'], d = ["position: ", ic, ";"]; if (b === "shape" || b === Tb) d.push("left:0;top:0;width:10px;height:10px;"); if (Mc) d.push("visibility: ", b === Tb ? ob : Ab); c.push(' style="', d.join(""), '"/>'); if (b) { c = b === Tb || b === "span" || b === "img" ? c.join("") : a.prepVML(c); this.element = hb(c) } this.renderer = a }, add: function (a) {
    var b = this.renderer, c = this.element, d = b.box; d = a ? a.element || a : d; a && a.inverted && b.invertChild(c, d); Mc && d.gVis === ob && Ja(c, { visibility: ob }); d.appendChild(c); this.added = true; this.alignOnAdd &&
this.updateTransform(); return this
}, attr: function (a, b) {
    var c, d, e, f = this.element || {}, g = f.style, h = f.nodeName, i = this.renderer, j = this.symbolName, m, v, P = this.shadows, T = this; if (Sb(a) && K(b)) { c = a; a = {}; a[c] = b } if (Sb(a)) { c = a; T = c === "strokeWidth" || c === "stroke-width" ? this.strokeweight : this[c] } else for (c in a) {
        d = a[c]; m = false; if (j && /^(x|y|r|start|end|width|height|innerR)/.test(c)) { if (!v) { this.symbolAttr(a); v = true } m = true } else if (c === "d") {
            d = d || []; this.d = d.join(" "); e = d.length; for (m = []; e--; ) m[e] = lc(d[e]) ? W(d[e] * 10) -
5 : d[e] === "Z" ? "x" : d[e]; d = m.join(" ") || "x"; f.path = d; if (P) for (e = P.length; e--; ) P[e].path = d; m = true
        } else if (c === "zIndex" || c === "visibility") { if (Mc && c === "visibility" && h === "DIV") { f.gVis = d; m = f.childNodes; for (e = m.length; e--; ) Ja(m[e], { visibility: d }); if (d === Ab) d = null } if (d) g[c] = d; m = true } else if (/^(width|height)$/.test(c)) { this[c] = d; if (this.updateClipping) { this[c] = d; this.updateClipping() } else g[c] = d; m = true } else if (/^(x|y)$/.test(c)) {
            this[c] = d; if (f.tagName === "SPAN") this.updateTransform(); else g[{ x: "left", y: "top"}[c]] =
d
        } else if (c === "class") f.className = d; else if (c === "stroke") { d = i.color(d, f, c); c = "strokecolor" } else if (c === "stroke-width" || c === "strokeWidth") { f.stroked = d ? true : false; c = "strokeweight"; this[c] = d; if (lc(d)) d += Ua } else if (c === "dashstyle") { (f.getElementsByTagName("stroke")[0] || hb(i.prepVML(["<stroke/>"]), null, null, f))[c] = d || "solid"; this.dashstyle = d; m = true } else if (c === "fill") if (h === "SPAN") g.color = d; else { f.filled = d !== jb ? true : false; d = i.color(d, f, c); c = "fillcolor" } else if (c === "translateX" || c === "translateY" || c === "rotation" ||
c === "align") { if (c === "align") c = "textAlign"; this[c] = d; this.updateTransform(); m = true } else if (c === "text") { this.bBox = null; f.innerHTML = d; m = true } if (P && c === "visibility") for (e = P.length; e--; ) P[e].style[c] = d; if (!m) if (Mc) f[c] = d; else Ga(f, c, d)
    } return T
}, clip: function (a) { var b = this, c = a.members; c.push(b); b.destroyClip = function () { nc(c, b) }; return b.css(a.getCSS(b.inverted)) }, css: function (a) {
    var b = this.element; if (b = a && b.tagName === "SPAN" && a.width) { delete a.width; this.textWidth = b; this.updateTransform() } this.styles = sa(this.styles,
a); Ja(this.element, a); return this
}, safeRemoveChild: function (a) { a.parentNode && pc(a) }, destroy: function () { this.destroyClip && this.destroyClip(); return Uc.prototype.destroy.apply(this) }, empty: function () { for (var a = this.element.childNodes, b = a.length, c; b--; ) { c = a[b]; c.parentNode.removeChild(c) } }, getBBox: function () { var a = this.element, b = this.bBox; if (!b) { if (a.nodeName === "text") a.style.position = ic; b = this.bBox = { x: a.offsetLeft, y: a.offsetTop, width: a.offsetWidth, height: a.offsetHeight} } return b }, on: function (a, b) {
    this.element["on" +
a] = function () { var c = db.event; c.target = c.srcElement; b(c) }; return this
}, updateTransform: function () {
    if (this.added) {
        var a = this, b = a.element, c = a.translateX || 0, d = a.translateY || 0, e = a.x || 0, f = a.y || 0, g = a.textAlign || "left", h = { left: 0, center: 0.5, right: 1}[g], i = g && g !== "left"; if (c || d) a.css({ marginLeft: c, marginTop: d }); a.inverted && u(b.childNodes, function (z) { a.renderer.invertChild(z, b) }); if (b.tagName === "SPAN") {
            var j, m; c = a.rotation; var v; j = 0; d = 1; var P = 0, T; v = ja(a.textWidth); var Y = a.xCorr || 0, H = a.yCorr || 0, U = [c, g, b.innerHTML,
a.textWidth].join(","); if (U !== a.cTT) {
                if (K(c)) { j = c * ae; d = rb(j); P = Cb(j); Ja(b, { filter: c ? ["progid:DXImageTransform.Microsoft.Matrix(M11=", d, ", M12=", -P, ", M21=", P, ", M22=", d, ", sizingMethod='auto expand')"].join("") : jb }) } j = b.offsetWidth; m = b.offsetHeight; if (j > v) { Ja(b, { width: v + Ua, display: "block", whiteSpace: "normal" }); j = v } v = W((ja(b.style.fontSize) || 12) * 1.2); Y = d < 0 && -j; H = P < 0 && -m; T = d * P < 0; Y += P * v * (T ? 1 - h : h); H -= d * v * (c ? T ? h : 1 - h : 1); if (i) { Y -= j * h * (d < 0 ? -1 : 1); if (c) H -= m * h * (P < 0 ? -1 : 1); Ja(b, { textAlign: g }) } a.xCorr = Y; a.yCorr =
H
            } Ja(b, { left: e + Y, top: f + H }); a.cTT = U
        } 
    } else this.alignOnAdd = true
}, shadow: function (a, b) {
    var c = [], d, e = this.element, f = this.renderer, g, h = e.style, i, j = e.path; if (j && typeof j.value !== "string") j = "x"; if (a) {
        for (d = 1; d <= 3; d++) {
            i = ['<shape isShadow="true" strokeweight="', 7 - 2 * d, '" filled="false" path="', j, '" coordsize="100,100" style="', e.style.cssText, '" />']; g = hb(f.prepVML(i), null, { left: ja(h.left) + 1, top: ja(h.top) + 1 }); i = ['<stroke color="black" opacity="', 0.05 * d, '"/>']; hb(f.prepVML(i), null, null, g); b ? b.element.appendChild(g) :
e.parentNode.insertBefore(g, e); c.push(g)
        } this.shadows = c
    } return this
} 
        }); ma = function () { this.init.apply(this, arguments) }; ma.prototype = Ca(ed.prototype, { Element: Db, isIE8: yc.indexOf("MSIE 8.0") > -1, init: function (a, b, c) { var d; this.alignedObjects = []; d = this.createElement(Tb); a.appendChild(d.element); this.box = d.element; this.boxWrapper = d; this.setSize(b, c, false); if (!ua.namespaces.hcv) { ua.namespaces.add("hcv", "urn:schemas-microsoft-com:vml"); ua.createStyleSheet().cssText = "hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } " } },
            clipRect: function (a, b, c, d) { var e = this.createElement(); return sa(e, { members: [], left: a, top: b, width: c, height: d, getCSS: function (f) { var g = this.top, h = this.left, i = h + this.width, j = g + this.height; g = { clip: "rect(" + W(f ? h : g) + "px," + W(f ? j : i) + "px," + W(f ? i : j) + "px," + W(f ? g : h) + "px)" }; !f && Mc && sa(g, { width: i + Ua, height: j + Ua }); return g }, updateClipping: function () { u(e.members, function (f) { f.css(e.getCSS(f.inverted)) }) } }) }, color: function (a, b, c) {
                var d, e = /^rgba/; if (a && a.linearGradient) {
                    var f, g, h = a.linearGradient, i, j, m, v; u(a.stops,
function (P, T) { if (e.test(P[1])) { d = bc(P[1]); f = d.get("rgb"); g = d.get("a") } else { f = P[1]; g = 1 } if (T) { m = f; v = g } else { i = f; j = g } }); a = 90 - Fa.atan((h[3] - h[1]) / (h[2] - h[0])) * 180 / kc; a = ["<", c, ' colors="0% ', i, ",100% ", m, '" angle="', a, '" opacity="', v, '" o:opacity2="', j, '" type="gradient" focus="100%" />']; hb(this.prepVML(a), null, null, b)
                } else if (e.test(a) && b.tagName !== "IMG") { d = bc(a); a = ["<", c, ' opacity="', d.get("a"), '"/>']; hb(this.prepVML(a), null, null, b); return d.get("rgb") } else {
                    b = b.getElementsByTagName(c); if (b.length) b[0].opacity =
1; return a
                } 
            }, prepVML: function (a) { var b = this.isIE8; a = a.join(""); if (b) { a = a.replace("/>", ' xmlns="urn:schemas-microsoft-com:vml" />'); a = a.indexOf('style="') === -1 ? a.replace("/>", ' style="display:inline-block;behavior:url(#default#VML);" />') : a.replace('style="', 'style="display:inline-block;behavior:url(#default#VML);') } else a = a.replace("<", "<hcv:"); return a }, text: function (a, b, c) {
                var d = Xa.chart.style; return this.createElement("span").attr({ text: a, x: W(b), y: W(c) }).css({ whiteSpace: "nowrap", fontFamily: d.fontFamily,
                    fontSize: d.fontSize
                })
            }, path: function (a) { return this.createElement("shape").attr({ coordsize: "100 100", d: a }) }, circle: function (a, b, c) { return this.symbol("circle").attr({ x: a, y: b, r: c }) }, g: function (a) { var b; if (a) b = { className: vc + a, "class": vc + a }; return this.createElement(Tb).attr(b) }, image: function (a, b, c, d, e) { var f = this.createElement("img").attr({ src: a }); arguments.length > 1 && f.css({ left: b, top: c, width: d, height: e }); return f }, rect: function (a, b, c, d, e, f) {
                if (Nb(a)) {
                    b = a.y; c = a.width; d = a.height; e = a.r; f = a.strokeWidth;
                    a = a.x
                } var g = this.symbol("rect"); g.r = e; return g.attr(g.crisp(f, a, b, Ia(c, 0), Ia(d, 0)))
            }, invertChild: function (a, b) { var c = b.style; Ja(a, { flip: "x", left: ja(c.width) - 10, top: ja(c.height) - 10, rotation: -90 }) }, symbols: { arc: function (a, b, c, d) { var e = d.start, f = d.end, g = rb(e), h = Cb(e), i = rb(f), j = Cb(f); d = d.innerR; var m = 0.07 / c, v = d && 0.1 / d || 0; if (f - e === 0) return ["x"]; else if (2 * kc - f + e < m) i = -m; else if (f - e < v) i = rb(e + v); return ["wa", a - c, b - c, a + c, b + c, a + c * g, b + c * h, a + c * i, b + c * j, "at", a - d, b - d, a + d, b + d, a + d * i, b + d * j, a + d * g, b + d * h, "x", "e"] }, circle: function (a,
b, c) { return ["wa", a - c, b - c, a + c, b + c, a + c, b, a + c, b, "e"] }, rect: function (a, b, c, d) { if (!K(d)) return []; var e = d.width; d = d.height; var f = a + e, g = b + d; c = tb(c, e, d); return [Za, a + c, b, Ka, f - c, b, "wa", f - 2 * c, b, f, b + 2 * c, f - c, b, f, b + c, Ka, f, g - c, "wa", f - 2 * c, g - 2 * c, f, g, f, g - c, f - c, g, Ka, a + c, g, "wa", a, g - 2 * c, a + 2 * c, g, a + c, g, a, g - c, Ka, a, b + c, "wa", a, b, a + 2 * c, b + 2 * c, a, b + c, a + c, b, "x", "e"] } 
            }
        }); fd = ma
    } Nd.prototype.callbacks = []; var Oc = function () { }; Oc.prototype = { init: function (a, b) {
        var c = a.chart.counters, d; this.series = a; this.applyOptions(b); this.pointAttr =
{}; if (a.options.colorByPoint) { d = a.chart.options.colors; if (!this.options) this.options = {}; this.color = this.options.color = this.color || d[c.color++]; c.wrapColor(d.length) } a.chart.pointCount++; return this
    }, applyOptions: function (a) { var b = this.series; this.config = a; if (lc(a) || a === null) this.y = a; else if (Nb(a) && !lc(a.length)) { sa(this, a); this.options = a } else if (Sb(a[0])) { this.name = a[0]; this.y = a[1] } else if (lc(a[0])) { this.x = a[0]; this.y = a[1] } if (this.x === Wa) this.x = b.autoIncrement() }, destroy: function () {
        var a = this, b = a.series,
c = b.chart.hoverPoints, d; b.chart.pointCount--; if (c) { a.setState(); nc(c, a) } a === b.chart.hoverPoint && a.onMouseOut(); pb(a); u(["graphic", "tracker", "group", "dataLabel", "connector", "shadowGroup"], function (e) { a[e] && a[e].destroy() }); a.legendItem && a.series.chart.legend.destroyItem(a); for (d in a) a[d] = null
    }, getLabelConfig: function () { return { x: this.category, y: this.y, series: this.series, point: this, percentage: this.percentage, total: this.total || this.stackTotal} }, select: function (a, b) {
        var c = this, d = c.series.chart; a = A(a,
!c.selected); c.firePointEvent(a ? "select" : "unselect", { accumulate: b }, function () { c.selected = a; c.setState(a && "select"); b || u(d.getSelectedPoints(), function (e) { if (e.selected && e !== c) { e.selected = false; e.setState(ib); e.firePointEvent("unselect") } }) })
    }, onMouseOver: function () { var a = this.series.chart, b = a.tooltip, c = a.hoverPoint; c && c !== this && c.onMouseOut(); this.firePointEvent("mouseOver"); b && !b.shared && b.refresh(this); this.setState(Bb); a.hoverPoint = this }, onMouseOut: function () {
        this.firePointEvent("mouseOut"); this.setState();
        this.series.chart.hoverPoint = null
    }, tooltipFormatter: function (a) { var b = this.series; return ['<span style="color:' + b.color + '">', this.name || b.name, "</span>: ", !a ? "<b>x = " + (this.name || this.x) + ",</b> " : "", "<b>", !a ? "y = " : "", this.y, "</b>"].join("") }, update: function (a, b, c) { var d = this, e = d.series, f = d.graphic, g = e.chart; b = A(b, true); d.firePointEvent("update", { options: a }, function () { d.applyOptions(a); if (Nb(a)) { e.getAttribs(); f && f.attr(d.pointAttr[e.state]) } e.isDirty = true; b && g.redraw(c) }) }, remove: function (a, b) {
        var c =
this, d = c.series, e = d.chart, f = d.data; oc(b, e); a = A(a, true); c.firePointEvent("remove", null, function () { nc(f, c); c.destroy(); d.isDirty = true; a && e.redraw() })
    }, firePointEvent: function (a, b, c) { var d = this, e = this.series.options; if (e.point.events[a] || d.options && d.options.events && d.options.events[a]) this.importEvents(); if (a === "click" && e.allowPointSelect) c = function (f) { d.select(null, f.ctrlKey || f.metaKey || f.shiftKey) }; Pa(this, a, b, c) }, importEvents: function () {
        if (!this.hasImportedEvents) {
            var a = Ca(this.series.options.point,
this.options).events, b; this.events = a; for (b in a) Qa(this, b, a[b]); this.hasImportedEvents = true
        } 
    }, setState: function (a) {
        var b = this.series, c = b.options.states, d = xb[b.type].marker && b.options.marker, e = d && !d.enabled, f = (d = d && d.states[a]) && d.enabled === false, g = b.stateMarkerGraphic, h = b.chart, i = this.pointAttr; a = a || ib; if (!(a === this.state || this.selected && a !== "select" || c[a] && c[a].enabled === false || a && (f || e && !d.enabled))) {
            if (this.graphic) this.graphic.attr(i[a]); else {
                if (a) {
                    if (!g) b.stateMarkerGraphic = g = h.renderer.circle(0,
0, i[a].r).attr(i[a]).add(b.group); g.translate(this.plotX, this.plotY)
                } if (g) g[a ? "show" : "hide"]()
            } this.state = a
        } 
    } 
    }; var sb = function () { }; sb.prototype = { isCartesian: true, type: "line", pointClass: Oc, pointAttrToOptions: { stroke: "lineColor", "stroke-width": "lineWidth", fill: "fillColor", r: "radius" }, init: function (a, b) {
        var c, d; d = a.series.length; this.chart = a; b = this.setOptions(b); sa(this, { index: d, options: b, name: b.name || "Series " + (d + 1), state: ib, pointAttr: {}, visible: b.visible !== false, selected: b.selected === true }); d = b.events;
        for (c in d) Qa(this, c, d[c]); if (d && d.click || b.point && b.point.events && b.point.events.click || b.allowPointSelect) a.runTrackerClick = true; this.getColor(); this.getSymbol(); this.setData(b.data, false)
    }, autoIncrement: function () { var a = this.options, b = this.xIncrement; b = A(b, a.pointStart, 0); this.pointInterval = A(this.pointInterval, a.pointInterval, 1); this.xIncrement = b + this.pointInterval; return b }, cleanData: function () {
        var a = this.chart, b = this.data, c, d, e = a.smallestInterval, f, g; Hd(b, function (h, i) { return h.x - i.x }); if (this.options.connectNulls) for (g =
b.length - 1; g >= 0; g--) b[g].y === null && b[g - 1] && b[g + 1] && b.splice(g, 1); for (g = b.length - 1; g >= 0; g--) if (b[g - 1]) { f = b[g].x - b[g - 1].x; if (f > 0 && (d === Wa || f < d)) { d = f; c = g } } if (e === Wa || d < e) a.smallestInterval = d; this.closestPoints = c
    }, getSegments: function () { var a = -1, b = [], c = this.data; u(c, function (d, e) { if (d.y === null) { e > a + 1 && b.push(c.slice(a + 1, e)); a = e } else e === c.length - 1 && b.push(c.slice(a + 1, e + 1)) }); this.segments = b }, setOptions: function (a) { var b = this.chart.options.plotOptions; return Ca(b[this.type], b.series, a) }, getColor: function () {
        var a =
this.chart.options.colors, b = this.chart.counters; this.color = this.options.color || a[b.color++] || "#0000ff"; b.wrapColor(a.length)
    }, getSymbol: function () { var a = this.chart.options.symbols, b = this.chart.counters; this.symbol = this.options.marker.symbol || a[b.symbol++]; b.wrapSymbol(a.length) }, addPoint: function (a, b, c, d) {
        var e = this.data, f = this.graph, g = this.area, h = this.chart; a = (new this.pointClass).init(this, a); oc(d, h); if (f && c) f.shift = c; if (g) { g.shift = c; g.isArea = true } b = A(b, true); e.push(a); c && e[0].remove(false); this.getAttribs();
        this.isDirty = true; b && h.redraw()
    }, setData: function (a, b) { var c = this, d = c.data, e = c.initialColor, f = c.chart, g = d && d.length || 0; c.xIncrement = null; if (K(e)) f.counters.color = e; for (a = tc(zc(a || []), function (h) { return (new c.pointClass).init(c, h) }); g--; ) d[g].destroy(); c.data = a; c.cleanData(); c.getSegments(); c.getAttribs(); c.isDirty = true; f.isDirtyBox = true; A(b, true) && f.redraw(false) }, remove: function (a, b) {
        var c = this, d = c.chart; a = A(a, true); if (!c.isRemoving) {
            c.isRemoving = true; Pa(c, "remove", null, function () {
                c.destroy(); d.isDirtyLegend =
d.isDirtyBox = true; a && d.redraw(b)
            })
        } c.isRemoving = false
    }, translate: function () {
        for (var a = this.chart, b = this.options.stacking, c = this.xAxis.categories, d = this.yAxis, e = this.data, f = e.length; f--; ) {
            var g = e[f], h = g.x, i = g.y, j = g.low, m = d.stacks[(i < 0 ? "-" : "") + this.stackKey]; g.plotX = this.xAxis.translate(h); if (b && this.visible && m && m[h]) { j = m[h]; h = j.total; j.cum = j = j.cum - i; i = j + i; if (b === "percent") { j = h ? j * 100 / h : 0; i = h ? i * 100 / h : 0 } g.percentage = h ? g.y * 100 / h : 0; g.stackTotal = h } if (K(j)) g.yBottom = d.translate(j, 0, 1, 0, 1); if (i !== null) g.plotY =
d.translate(i, 0, 1, 0, 1); g.clientX = a.inverted ? a.plotHeight - g.plotX : g.plotX; g.category = c && c[g.x] !== Wa ? c[g.x] : g.x
        } 
    }, setTooltipPoints: function (a) { var b = this.chart, c = b.inverted, d = [], e = W((c ? b.plotTop : b.plotLeft) + b.plotSizeX), f, g, h = []; if (a) this.tooltipPoints = null; u(this.segments, function (i) { d = d.concat(i) }); if (this.xAxis && this.xAxis.reversed) d = d.reverse(); u(d, function (i, j) { f = d[j - 1] ? d[j - 1]._high + 1 : 0; for (g = i._high = d[j + 1] ? lb((i.plotX + (d[j + 1] ? d[j + 1].plotX : e)) / 2) : e; f <= g; ) h[c ? e - f++ : f++] = i }); this.tooltipPoints = h },
        onMouseOver: function () { var a = this.chart, b = a.hoverSeries; if (!(!Kb && a.mouseIsDown)) { b && b !== this && b.onMouseOut(); this.options.events.mouseOver && Pa(this, "mouseOver"); this.tracker && this.tracker.toFront(); this.setState(Bb); a.hoverSeries = this } }, onMouseOut: function () { var a = this.options, b = this.chart, c = b.tooltip, d = b.hoverPoint; d && d.onMouseOut(); this && a.events.mouseOut && Pa(this, "mouseOut"); c && !a.stickyTracking && c.hide(); this.setState(); b.hoverSeries = null }, animate: function (a) {
            var b = this.chart, c = this.clipRect,
d = this.options.animation; if (d && !Nb(d)) d = {}; if (a) { if (!c.isAnimating) { c.attr("width", 0); c.isAnimating = true } } else { c.animate({ width: b.plotSizeX }, d); this.animate = null } 
        }, drawPoints: function () { var a, b = this.data, c = this.chart, d, e, f, g, h, i; if (this.options.marker.enabled) for (f = b.length; f--; ) { g = b[f]; d = g.plotX; e = g.plotY; i = g.graphic; if (e !== Wa && !isNaN(e)) { a = g.pointAttr[g.selected ? "select" : ib]; h = a.r; if (i) i.animate({ x: d, y: e, r: h }); else g.graphic = c.renderer.symbol(A(g.marker && g.marker.symbol, this.symbol), d, e, h).attr(a).add(this.group) } } },
        convertAttribs: function (a, b, c, d) { var e = this.pointAttrToOptions, f, g, h = {}; a = a || {}; b = b || {}; c = c || {}; d = d || {}; for (f in e) { g = e[f]; h[f] = A(a[g], b[f], c[f], d[f]) } return h }, getAttribs: function () {
            var a = this, b = xb[a.type].marker ? a.options.marker : a.options, c = b.states, d = c[Bb], e, f = a.color, g = { stroke: f, fill: f }, h = a.data, i = [], j, m = a.pointAttrToOptions, v; if (a.options.marker) { d.radius = d.radius || b.radius + 2; d.lineWidth = d.lineWidth || b.lineWidth + 1 } else d.color = d.color || bc(d.color || f).brighten(d.brightness).get(); i[ib] = a.convertAttribs(b,
g); u([Bb, "select"], function (P) { i[P] = a.convertAttribs(c[P], i[ib]) }); a.pointAttr = i; for (f = h.length; f--; ) {
                g = h[f]; if ((b = g.options && g.options.marker || g.options) && b.enabled === false) b.radius = 0; e = false; if (g.options) for (v in m) if (K(b[m[v]])) e = true; if (e) {
                    j = []; c = b.states || {}; e = c[Bb] = c[Bb] || {}; if (!a.options.marker) e.color = bc(e.color || g.options.color).brighten(e.brightness || d.brightness).get(); j[ib] = a.convertAttribs(b, i[ib]); j[Bb] = a.convertAttribs(c[Bb], i[Bb], j[ib]); j.select = a.convertAttribs(c.select, i.select,
j[ib])
                } else j = i; g.pointAttr = j
            } 
        }, destroy: function () { var a = this, b = a.chart, c = a.clipRect, d = /\/5[0-9\.]+ (Safari|Mobile)\//.test(yc), e, f; Pa(a, "destroy"); pb(a); a.legendItem && a.chart.legend.destroyItem(a); u(a.data, function (g) { g.destroy() }); if (c && c !== b.clipRect) a.clipRect = c.destroy(); u(["area", "graph", "dataLabelsGroup", "group", "tracker"], function (g) { if (a[g]) { e = d && g === "group" ? "hide" : "destroy"; a[g][e]() } }); if (b.hoverSeries === a) b.hoverSeries = null; nc(b.series, a); for (f in a) delete a[f] }, drawDataLabels: function () {
            if (this.options.dataLabels.enabled) {
                var a,
b, c = this.data, d = this.options, e = d.dataLabels, f, g = this.dataLabelsGroup, h = this.chart, i = h.renderer, j = h.inverted, m = this.type, v; v = d.stacking; var P = m === "column" || m === "bar", T = e.verticalAlign === null, Y = e.y === null; if (P) if (v) { if (T) e = Ca(e, { verticalAlign: "middle" }); if (Y) e = Ca(e, { y: { top: 14, middle: 4, bottom: -6}[e.verticalAlign] }) } else if (T) e = Ca(e, { verticalAlign: "top" }); if (g) g.translate(h.plotLeft, h.plotTop); else g = this.dataLabelsGroup = i.g("data-labels").attr({ visibility: this.visible ? Ab : ob, zIndex: 6 }).translate(h.plotLeft,
h.plotTop).add(); v = e.color; if (v === "auto") v = null; e.style.color = A(v, this.color, "black"); u(c, function (H) {
    var U = H.barX, z = U && U + H.barW / 2 || H.plotX || -999, M = A(H.plotY, -999), y = H.dataLabel, C = e.align, Z = Y ? H.y >= 0 ? -6 : 12 : e.y; f = e.formatter.call(H.getLabelConfig()); a = (j ? h.plotWidth - M : z) + e.x; b = (j ? h.plotHeight - z : M) + Z; if (m === "column") a += { left: -1, right: 1}[C] * H.barW / 2 || 0; if (j && H.y < 0) { C = "right"; a -= 10 } if (y) { if (j && !e.y) b = b + ja(y.styles.lineHeight) * 0.9 - y.getBBox().height / 2; y.attr({ text: f }).animate({ x: a, y: b }) } else if (K(f)) {
        y =
H.dataLabel = i.text(f, a, b).attr({ align: C, rotation: e.rotation, zIndex: 1 }).css(e.style).add(g); j && !e.y && y.attr({ y: b + ja(y.styles.lineHeight) * 0.9 - y.getBBox().height / 2 })
    } if (P && d.stacking && y) { z = H.barY; M = H.barW; H = H.barH; y.align(e, null, { x: j ? h.plotWidth - z - H : U, y: j ? h.plotHeight - U - M : z, width: j ? H : M, height: j ? M : H }) } 
})
            } 
        }, drawGraph: function () {
            var a = this, b = a.options, c = a.graph, d = [], e, f = a.area, g = a.group, h = b.lineColor || a.color, i = b.lineWidth, j = b.dashStyle, m, v = a.chart.renderer, P = a.yAxis.getThreshold(b.threshold || 0), T = /^area/.test(a.type),
Y = [], H = []; u(a.segments, function (U) { m = []; u(U, function (C, Z) { if (a.getPointSpline) m.push.apply(m, a.getPointSpline(U, C, Z)); else { m.push(Z ? Ka : Za); Z && b.step && m.push(C.plotX, U[Z - 1].plotY); m.push(C.plotX, C.plotY) } }); if (U.length > 1) d = d.concat(m); else Y.push(U[0]); if (T) { var z = [], M, y = m.length; for (M = 0; M < y; M++) z.push(m[M]); y === 3 && z.push(Ka, m[1], m[2]); if (b.stacking && a.type !== "areaspline") for (M = U.length - 1; M >= 0; M--) z.push(U[M].plotX, U[M].yBottom); else z.push(Ka, U[U.length - 1].plotX, P, Ka, U[0].plotX, P); H = H.concat(z) } });
            a.graphPath = d; a.singlePoints = Y; if (T) { e = A(b.fillColor, bc(a.color).setOpacity(b.fillOpacity || 0.75).get()); if (f) f.animate({ d: H }); else a.area = a.chart.renderer.path(H).attr({ fill: e }).add(g) } if (c) { Hc(c); c.animate({ d: d }) } else if (i) { c = { stroke: h, "stroke-width": i }; if (j) c.dashstyle = j; a.graph = v.path(d).attr(c).add(g).shadow(b.shadow) } 
        }, render: function () {
            var a = this, b = a.chart, c, d, e = a.options, f = e.animation, g = f && a.animate; f = g ? f && f.duration || 500 : 0; var h = a.clipRect, i = b.renderer; if (!h) {
                h = a.clipRect = !b.hasRendered &&
b.clipRect ? b.clipRect : i.clipRect(0, 0, b.plotSizeX, b.plotSizeY); if (!b.clipRect) b.clipRect = h
            } if (!a.group) { c = a.group = i.g("series"); if (b.inverted) { d = function () { c.attr({ width: b.plotWidth, height: b.plotHeight }).invert() }; d(); Qa(b, "resize", d); Qa(a, "destroy", function () { pb(b, "resize", d) }) } c.clip(a.clipRect).attr({ visibility: a.visible ? Ab : ob, zIndex: e.zIndex }).translate(b.plotLeft, b.plotTop).add(b.seriesGroup) } a.drawDataLabels(); g && a.animate(true); a.drawGraph && a.drawGraph(); a.drawPoints(); a.options.enableMouseTracking !==
false && a.drawTracker(); g && a.animate(); setTimeout(function () { h.isAnimating = false; if ((c = a.group) && h !== b.clipRect && h.renderer) { c.clip(a.clipRect = b.clipRect); h.destroy() } }, f); a.isDirty = false
        }, redraw: function () { var a = this.chart, b = this.group; if (b) { a.inverted && b.attr({ width: a.plotWidth, height: a.plotHeight }); b.animate({ translateX: a.plotLeft, translateY: a.plotTop }) } this.translate(); this.setTooltipPoints(true); this.render() }, setState: function (a) {
            var b = this.options, c = this.graph, d = b.states; b = b.lineWidth; a = a ||
ib; if (this.state !== a) { this.state = a; if (!(d[a] && d[a].enabled === false)) { if (a) b = d[a].lineWidth || b + 1; if (c && !c.dashstyle) c.attr({ "stroke-width": b }, a ? 0 : 500) } } 
        }, setVisible: function (a, b) {
            var c = this.chart, d = this.legendItem, e = this.group, f = this.tracker, g = this.dataLabelsGroup, h, i = this.data, j = c.options.chart.ignoreHiddenSeries; h = this.visible; h = (this.visible = a = a === Wa ? !h : a) ? "show" : "hide"; e && e[h](); if (f) f[h](); else for (e = i.length; e--; ) { f = i[e]; f.tracker && f.tracker[h]() } g && g[h](); d && c.legend.colorizeItem(this, a); this.isDirty =
true; this.options.stacking && u(c.series, function (m) { if (m.options.stacking && m.visible) m.isDirty = true }); if (j) c.isDirtyBox = true; b !== false && c.redraw(); Pa(this, h)
        }, show: function () { this.setVisible(true) }, hide: function () { this.setVisible(false) }, select: function (a) { this.selected = a = a === Wa ? !this.selected : a; if (this.checkbox) this.checkbox.checked = a; Pa(this, a ? "select" : "unselect") }, drawTracker: function () {
            var a = this, b = a.options, c = [].concat(a.graphPath), d = c.length, e = a.chart, f = e.options.tooltip.snap, g = a.tracker, h = b.cursor;
            h = h && { cursor: h }; var i = a.singlePoints, j; if (d) for (j = d + 1; j--; ) { c[j] === Za && c.splice(j + 1, 0, c[j + 1] - f, c[j + 2], Ka); if (j && c[j] === Za || j === d) c.splice(j, 0, Ka, c[j - 2] + f, c[j - 1]) } for (j = 0; j < i.length; j++) { d = i[j]; c.push(Za, d.plotX - f, d.plotY, Ka, d.plotX + f, d.plotY) } if (g) g.attr({ d: c }); else a.tracker = e.renderer.path(c).attr({ isTracker: true, stroke: ce, fill: jb, "stroke-width": b.lineWidth + 2 * f, visibility: a.visible ? Ab : ob, zIndex: b.zIndex || 1 }).on(Kb ? "touchstart" : "mouseover", function () { e.hoverSeries !== a && a.onMouseOver() }).on("mouseout",
function () { b.stickyTracking || a.onMouseOut() }).css(h).add(e.trackerGroup)
        } 
    }; ma = yb(sb); wb.line = ma; ma = yb(sb, { type: "area" }); wb.area = ma; ma = yb(sb, { type: "spline", getPointSpline: function (a, b, c) {
        var d = b.plotX, e = b.plotY, f = a[c - 1], g = a[c + 1], h, i, j, m; if (c && c < a.length - 1) {
            a = f.plotY; j = g.plotX; g = g.plotY; var v; h = (1.5 * d + f.plotX) / 2.5; i = (1.5 * e + a) / 2.5; j = (1.5 * d + j) / 2.5; m = (1.5 * e + g) / 2.5; v = (m - i) * (j - d) / (j - h) + e - m; i += v; m += v; if (i > a && i > e) { i = Ia(a, e); m = 2 * e - i } else if (i < a && i < e) { i = tb(a, e); m = 2 * e - i } if (m > g && m > e) { m = Ia(g, e); i = 2 * e - m } else if (m <
g && m < e) { m = tb(g, e); i = 2 * e - m } b.rightContX = j; b.rightContY = m
        } if (c) { b = ["C", f.rightContX || f.plotX, f.rightContY || f.plotY, h || d, i || e, d, e]; f.rightContX = f.rightContY = null } else b = [Za, d, e]; return b
    } 
    }); wb.spline = ma; ma = yb(ma, { type: "areaspline" }); wb.areaspline = ma; var hd = yb(sb, { type: "column", pointAttrToOptions: { stroke: "borderColor", "stroke-width": "borderWidth", fill: "color", r: "borderRadius" }, init: function () {
        sb.prototype.init.apply(this, arguments); var a = this, b = a.chart; b.hasColumn = true; b.hasRendered && u(b.series, function (c) {
            if (c.type ===
a.type) c.isDirty = true
        })
    }, translate: function () {
        var a = this, b = a.chart, c = a.options, d = c.stacking, e = c.borderWidth, f = 0, g = a.xAxis.reversed, h = a.xAxis.categories, i = {}, j, m; sb.prototype.translate.apply(a); u(b.series, function (C) { if (C.type === a.type && C.visible) { if (C.options.stacking) { j = C.stackKey; if (i[j] === Wa) i[j] = f++; m = i[j] } else m = f++; C.columnIndex = m } }); var v = a.data, P = a.closestPoints; h = bb(v[1] ? v[P].plotX - v[P - 1].plotX : b.plotSizeX / (h && h.length || 1)); P = h * c.groupPadding; var T = (h - 2 * P) / f, Y = c.pointWidth, H = K(Y) ? (T - Y) / 2 :
T * c.pointPadding, U = Ia(A(Y, T - 2 * H), 1), z = H + (P + ((g ? f - a.columnIndex : a.columnIndex) || 0) * T - h / 2) * (g ? -1 : 1), M = a.yAxis.getThreshold(c.threshold || 0), y = A(c.minPointLength, 5); u(v, function (C) {
    var Z = C.plotY, Sa = C.yBottom || M, Na = C.plotX + z, Ea = md(tb(Z, Sa)), gb = md(Ia(Z, Sa) - Ea), Lb = a.yAxis.stacks[(C.y < 0 ? "-" : "") + a.stackKey], Rb; d && a.visible && Lb && Lb[C.x] && Lb[C.x].setOffset(z, U); if (bb(gb) < y) { if (y) { gb = y; Ea = bb(Ea - M) > y ? Sa - y : M - (Z <= M ? y : 0) } Rb = Ea - 3 } sa(C, { barX: Na, barY: Ea, barW: U, barH: gb }); C.shapeType = "rect"; Z = sa(b.renderer.Element.prototype.crisp.apply({},
[e, Na, Ea, U, gb]), { r: c.borderRadius }); if (e % 2) { Z.y -= 1; Z.height += 1 } C.shapeArgs = Z; C.trackerArgs = K(Rb) && Ca(C.shapeArgs, { height: Ia(6, gb + 3), y: Rb })
})
    }, getSymbol: function () { }, drawGraph: function () { }, drawPoints: function () { var a = this, b = a.options, c = a.chart.renderer, d, e; u(a.data, function (f) { var g = f.plotY; if (g !== Wa && !isNaN(g) && f.y !== null) { d = f.graphic; e = f.shapeArgs; if (d) { Hc(d); d.animate(e) } else f.graphic = c[f.shapeType](e).attr(f.pointAttr[f.selected ? "select" : ib]).add(a.group).shadow(b.shadow) } }) }, drawTracker: function () {
        var a =
this, b = a.chart, c = b.renderer, d, e, f = +new Date, g = a.options, h = g.cursor, i = h && { cursor: h }, j; u(a.data, function (m) {
    e = m.tracker; d = m.trackerArgs || m.shapeArgs; delete d.strokeWidth; if (m.y !== null) if (e) e.attr(d); else m.tracker = c[m.shapeType](d).attr({ isTracker: f, fill: ce, visibility: a.visible ? Ab : ob, zIndex: g.zIndex || 1 }).on(Kb ? "touchstart" : "mouseover", function (v) { j = v.relatedTarget || v.fromElement; b.hoverSeries !== a && Ga(j, "isTracker") !== f && a.onMouseOver(); m.onMouseOver() }).on("mouseout", function (v) {
        if (!g.stickyTracking) {
            j =
v.relatedTarget || v.toElement; Ga(j, "isTracker") !== f && a.onMouseOut()
        } 
    }).css(i).add(m.group || b.trackerGroup)
})
    }, animate: function (a) { var b = this, c = b.data; if (!a) { u(c, function (d) { var e = d.graphic; d = d.shapeArgs; if (e) { e.attr({ height: 0, y: b.yAxis.translate(0, 0, 1) }); e.animate({ height: d.height, y: d.y }, b.options.animation) } }); b.animate = null } }, remove: function () { var a = this, b = a.chart; b.hasRendered && u(b.series, function (c) { if (c.type === a.type) c.isDirty = true }); sb.prototype.remove.apply(a, arguments) } 
    }); wb.column = hd; ma = yb(hd,
{ type: "bar", init: function (a) { a.inverted = this.inverted = true; hd.prototype.init.apply(this, arguments) } }); wb.bar = ma; ma = yb(sb, { type: "scatter", translate: function () { var a = this; sb.prototype.translate.apply(a); u(a.data, function (b) { b.shapeType = "circle"; b.shapeArgs = { x: b.plotX, y: b.plotY, r: a.chart.options.tooltip.snap} }) }, drawTracker: function () {
    var a = this, b = a.options.cursor, c = b && { cursor: b }, d; u(a.data, function (e) {
        (d = e.graphic) && d.attr({ isTracker: true }).on("mouseover", function () { a.onMouseOver(); e.onMouseOver() }).on("mouseout",
function () { a.options.stickyTracking || a.onMouseOut() }).css(c)
    })
}, cleanData: function () { } 
}); wb.scatter = ma; ma = yb(Oc, { init: function () { Oc.prototype.init.apply(this, arguments); var a = this, b; sa(a, { visible: a.visible !== false, name: A(a.name, "Slice") }); b = function () { a.slice() }; Qa(a, "select", b); Qa(a, "unselect", b); return a }, setVisible: function (a) {
    var b = this.series.chart, c = this.tracker, d = this.dataLabel, e = this.connector, f = this.shadowGroup, g; g = (this.visible = a = a === Wa ? !this.visible : a) ? "show" : "hide"; this.group[g](); c &&
c[g](); d && d[g](); e && e[g](); f && f[g](); this.legendItem && b.legend.colorizeItem(this, a)
}, slice: function (a, b, c) { var d = this.series.chart, e = this.slicedTranslation; oc(c, d); A(b, true); a = this.sliced = K(a) ? a : !this.sliced; a = { translateX: a ? e[0] : d.plotLeft, translateY: a ? e[1] : d.plotTop }; this.group.animate(a); this.shadowGroup && this.shadowGroup.animate(a) } 
}); ma = yb(sb, { type: "pie", isCartesian: false, pointClass: ma, pointAttrToOptions: { stroke: "borderColor", "stroke-width": "borderWidth", fill: "color" }, getColor: function () {
    this.initialColor =
this.chart.counters.color
}, animate: function () { var a = this; u(a.data, function (b) { var c = b.graphic; b = b.shapeArgs; var d = -kc / 2; if (c) { c.attr({ r: 0, start: d, end: d }); c.animate({ r: b.r, start: b.start, end: b.end }, a.options.animation) } }); a.animate = null }, translate: function () {
    var a = 0, b = -0.25, c = this.options, d = c.slicedOffset, e = d + c.borderWidth, f = c.center.concat([c.size, c.innerSize || 0]), g = this.chart, h = g.plotWidth, i = g.plotHeight, j, m, v, P = this.data, T = 2 * kc, Y, H = tb(h, i), U, z, M, y = c.dataLabels.distance; f = tc(f, function (C, Z) {
        return (U =
/%$/.test(C)) ? [h, i, H, H][Z] * ja(C) / 100 : C
    }); this.getX = function (C, Z) { v = Fa.asin((C - f[1]) / (f[2] / 2 + y)); return f[0] + (Z ? -1 : 1) * rb(v) * (f[2] / 2 + y) }; this.center = f; u(P, function (C) { a += C.y }); u(P, function (C) {
        Y = a ? C.y / a : 0; j = W(b * T * 1E3) / 1E3; b += Y; m = W(b * T * 1E3) / 1E3; C.shapeType = "arc"; C.shapeArgs = { x: f[0], y: f[1], r: f[2] / 2, innerR: f[3] / 2, start: j, end: m }; v = (m + j) / 2; C.slicedTranslation = tc([rb(v) * d + g.plotLeft, Cb(v) * d + g.plotTop], W); z = rb(v) * f[2] / 2; M = Cb(v) * f[2] / 2; C.tooltipPos = [f[0] + z * 0.7, f[1] + M * 0.7]; C.labelPos = [f[0] + z + rb(v) * y, f[1] + M + Cb(v) *
y, f[0] + z + rb(v) * e, f[1] + M + Cb(v) * e, f[0] + z, f[1] + M, y < 0 ? "center" : v < T / 4 ? "left" : "right", v]; C.percentage = Y * 100; C.total = a
    }); this.setTooltipPoints()
}, render: function () { this.drawPoints(); this.options.enableMouseTracking !== false && this.drawTracker(); this.drawDataLabels(); this.options.animation && this.animate && this.animate(); this.isDirty = false }, drawPoints: function () {
    var a = this.chart, b = a.renderer, c, d, e, f = this.options.shadow, g, h; u(this.data, function (i) {
        d = i.graphic; h = i.shapeArgs; e = i.group; g = i.shadowGroup; if (f && !g) g =
i.shadowGroup = b.g("shadow").attr({ zIndex: 4 }).add(); if (!e) e = i.group = b.g("point").attr({ zIndex: 5 }).add(); c = i.sliced ? i.slicedTranslation : [a.plotLeft, a.plotTop]; e.translate(c[0], c[1]); g && g.translate(c[0], c[1]); if (d) d.animate(h); else i.graphic = b.arc(h).attr(sa(i.pointAttr[ib], { "stroke-linejoin": "round" })).add(i.group).shadow(f, g); i.visible === false && i.setVisible(false)
    })
}, drawDataLabels: function () {
    var a = this.data, b, c = this.chart, d = this.options.dataLabels, e = A(d.connectorPadding, 10), f = A(d.connectorWidth, 1),
g, h, i = A(d.softConnector, true), j = d.distance, m = this.center, v = m[2] / 2; m = m[1]; var P = j > 0, T = [[], []], Y, H, U, z, M = 2, y; if (d.enabled) {
        sb.prototype.drawDataLabels.apply(this); u(a, function (gb) { if (gb.dataLabel) T[gb.labelPos[7] < kc / 2 ? 0 : 1].push(gb) }); T[1].reverse(); z = function (gb, Lb) { return Lb.y - gb.y }; for (a = T[0][0] && T[0][0].dataLabel && ja(T[0][0].dataLabel.styles.lineHeight); M--; ) {
            var C = [], Z = [], Sa = T[M], Na = Sa.length, Ea; for (y = m - v - j; y <= m + v + j; y += a) C.push(y); U = C.length; if (Na > U) {
                h = [].concat(Sa); h.sort(z); for (y = Na; y--; ) h[y].rank =
y; for (y = Na; y--; ) Sa[y].rank >= U && Sa.splice(y, 1); Na = Sa.length
            } for (y = 0; y < Na; y++) { b = Sa[y]; h = b.labelPos; b = 9999; for (H = 0; H < U; H++) { g = bb(C[H] - h[1]); if (g < b) { b = g; Ea = H } } if (Ea < y && C[y] !== null) Ea = y; else { if (U < Na - y + Ea && C[y] !== null) Ea = U - Na + y; for (; C[Ea] === null; ) Ea++ } Z.push({ i: Ea, y: C[Ea] }); C[Ea] = null } Z.sort(z); for (y = 0; y < Na; y++) {
                b = Sa[y]; h = b.labelPos; g = b.dataLabel; H = Z.pop(); Y = h[1]; U = b.visible === false ? ob : Ab; Ea = H.i; H = H.y; if (Y > H && C[Ea + 1] !== null || Y < H && C[Ea - 1] !== null) H = Y; Y = this.getX(Ea === 0 || Ea === C.length - 1 ? Y : H, M); g.attr({ visibility: U,
                    align: h[6]
                })[g.moved ? "animate" : "attr"]({ x: Y + d.x + ({ left: e, right: -e}[h[6]] || 0), y: H + d.y }); g.moved = true; if (P && f) { g = b.connector; h = i ? [Za, Y + (h[6] === "left" ? 5 : -5), H, "C", Y, H, 2 * h[2] - h[4], 2 * h[3] - h[5], h[2], h[3], Ka, h[4], h[5]] : [Za, Y + (h[6] === "left" ? 5 : -5), H, Ka, h[2], h[3], Ka, h[4], h[5]]; if (g) { g.animate({ d: h }); g.attr("visibility", U) } else b.connector = g = this.chart.renderer.path(h).attr({ "stroke-width": f, stroke: d.connectorColor || b.color || "#606060", visibility: U, zIndex: 3 }).translate(c.plotLeft, c.plotTop).add() } 
            } 
        } 
    } 
}, drawTracker: hd.prototype.drawTracker,
    getSymbol: function () { } 
}); wb.pie = ma; db.Highcharts = { Chart: Nd, dateFormat: Zc, pathAnim: Nc, getOptions: function () { return Xa }, hasRtlBug: me, numberFormat: Ed, Point: Oc, Color: bc, Renderer: fd, seriesTypes: wb, setOptions: function (a) { Xa = Ca(Xa, a); Id(); return Xa }, Series: sb, addEvent: Qa, removeEvent: pb, createElement: hb, discardElement: pc, css: Ja, each: u, extend: sa, map: tc, merge: Ca, pick: A, extendClass: yb, product: "Highcharts", version: "2.1.9"}
})();
